PHP用MySQL数据库存储session的解决办法
内容摘要
这篇文章主要为大家详细介绍了PHP用MySQL数据库存储session的简单示例,具有一定的参考价值,可以用来参考一下。
对此感兴趣的朋友,看看idc笔记做的技术笔记!隐患一:如果客户端机
对此感兴趣的朋友,看看idc笔记做的技术笔记!隐患一:如果客户端机
文章正文
这篇文章主要为大家详细介绍了PHP用MySQL数据库存储session的简单示例,具有一定的参考价值,可以用来参考一下。
对此感兴趣的朋友,看看idc笔记做的技术笔记!
隐患一:如果客户端机器的cookie一旦因病毒而失效了,那么session也就相当于没有了。隐患二:session在php中默认的是以文件的形式保存在一个临时文件夹里面的,对于一个小型系统来说,这样做完全可以,可是对于一个大型而又被经常访问的系统来说,就不是很好的办法了。假设这个网站一天有1000个人访问。一个月以后session的临时文件夹就会有30000个临时文件。想象一下计算机要从30000里面找一条session_sid是一个多么漫长的事情呀!因此为了提高效率。交易使用用数据库保存session。具体方法如下:1.更改php.ini文件。由于php默认保存session的方式是files所以我们要改变它。即:找到“session.save_handler = files”将“files”改为“User”。把session的模式改成用户自定义的。2.建立数据库:CREATE TABLE `db_session` (`sesskey` char(32) NOT NULL,`expiry` int(11) unsigned NOT NULL,`value` text NOT NULL,PRIMARY KEY (`sesskey`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;[/code]数据库表明:db_session列名:sesskey,expiry,value 其中:sesskey为主键。Value里面存放着session里面的值。3.建立session_mysql.php文件。这个文件是用来构造保存session的方法的。修改一下参数直接使用就可以了。session_mysql.phpPHP代码:代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | <code> <?php $gb_DBname = "db_myBBS" ; //数据库名称 $gb_DBuser = "root" ; //数据库用户名称 $gb_DBpass = "23928484" ; //数据库密码 $gb_DBHOSTname = "localhost" ; //主机的名称或是IP地址 $SESS_DBH = "" ; $SESS_LIFE =get_cfg_var( "session.gc_maxlifetime" ); //得到session的最大有效期。 function sess_open( $save_path , $session_name ){ global $gb_DBHOSTname , $gb_DBname , $gb_DBuser , $gb_DBpass , $SESS_DBH ; if (! $SESS_DBH =mysql_pconnect( $gb_DBHOSTname , $gb_DBuser , $gb_DBpass )){ echo "<li>MySql Error:" .mysql_error(). "<li>" ; die (); } if (!mysql_select_db( $gb_DBname , $SESS_DBH )){ echo "<li>MySql Error:" .mysql_error(). "<li>" ; die (); } return true; } function sess_close(){ return true; } function sess_read( $key ){ global $SESS_DBH , $SESS_LIFE ; $qry = "select value from db_session where sesskey = '$key' and expiry > " .time(); $qid =mysql_query( $qry , $SESS_DBH ); if (list( $value )=mysql_fetch_row( $qid )){ return $value ; } return false; } function sess_write( $key , $val ){ global $SESS_DBH , $SESS_LIFE ; $expiry =time()+ $SESS_LIFE ; $value = $val ; $qry = "insert into db_session values('$key',$expiry,'$value')" ; $qid =mysql_query( $qry , $SESS_DBH ); if (! $qid ){ $qry = "update db_session set expiry=$expiry, value='$value' where sesskey='$key' and expiry >" .time(); $qid =mysql_query( $qry , $SESS_DBH ); } return $qid ; } function sess_destroy( $key ){ global $SESS_DBH ; $qry = "delete from db_session where sesskey = '$key'" ; $qid =mysql_query( $qry , $SESS_DBH ); return $qid ; } function sess_gc( $maxlifetime ){ global $SESS_DBH ; $qry = "delete from db_session where expiry < " .time(); $qid =mysql_query( $qry , $SESS_DBH ); return mysql_affected_rows( $SESS_DBH ); } session_module_name(); session_set_save_handler( "sess_open" , "sess_close" , "sess_read" , "sess_write" , "sess_destroy" , "sess_gc" ); ?> </code> |
代码如下:
1 2 3 4 5 6 7 8 9 10 | <code> <?php include ( "session_mysql.php" ); session_start(); $_SESSION [ 'abc' ]= "A: I will be back!" ; $_SESSION [ 'meto' ]= "B: Me too " ; $_SESSION [ 'name' ]= "louis " ; echo "<a href=\"get_session_test.php\">click me</a>" ; ?> </code> |
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <code> <?php include ( "session_mysql.php" ); session_start(); echo $_SESSION [ 'abc' ]; echo "<br>" ; echo $_SESSION [ 'meto' ]; echo "<br>" ; echo $_SESSION [ 'name' ]; $_SESSION [ 'wq' ]= "12e" ; echo "<br><a href=\"get_session_test2.php\">click again</a>" ; ?> </code> |
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <code> <?php include ( "session_mysql.php" ); session_start(); echo $_SESSION [ 'abc' ]; echo "<br>" ; echo $_SESSION [ 'meto' ]; echo "<br>" ; echo $_SESSION [ 'name' ]; echo "<br>" ; echo $_SESSION [ 'wq' ]; //session_destroy();//用来销毁所有session的函数。 ?> </code> |
注:关于PHP用MySQL数据库存储session的简单示例的内容就先介绍到这里,更多相关文章的可以留意
代码注释