php怎么把session保存到MySql数据库中
session我们多半是保存在服务器中,但是今天有一个功能就是需要把session保存在数据库中,这样可以实现同ie多浏览了,php中session默认的存储方式是硬盘,php也可以改变默认的存储方式,主要使用到session_set_save_handler方法,下面分享下如何将session保存到MySql数据库中的具体代码.
1.建session表, 代码如下:
CREATE TABLE `session` ( `sessionid` varchar(128) NOT NULL, `uid` int(11) NOT NULL, `data` mediumblob NOT NULL, `timestamp` int(11) NOT NULL, `ip` varchar(15) NOT NULL, PRIMARY KEY (`sessionid`), KEY `time_session` (`timestamp`,`sessionid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; //uid 是保留字段2.自定义session类, 代码如下:
<?php class CustomSession{ private static $db_host = "localhost" ; private static $db_user = "root" ; private static $db_password = "" ; private static $database = "session" ; private $conn ; public static function getInstance(){ static $instance =null; if ( $instance ==null){ $instance = new CustomSession(); } return $instance ; } public function __construct(){ session_set_save_handler( array ( $this , "open" ), array ( $this , "close" ), array ( $this , "read" ), array ( $this , "write" ), array ( $this , "destroy" ), array ( $this , "gc" ) ); } public function __destruct(){ session_write_close(); } public function open(){ $this ->conn=mysql_connect(CustomSession:: $db_host ,CustomSession:: $db_user ,CustomSession:: $db_password ); mysql_select_db(CustomSession:: $database , $this ->conn); } public function close(){ mysql_close( $this ->conn); } public function read( $id ){ $escaped_id =mysql_escape_string( $id ); $res = $this ->query( "select * from `session` where `sessionid`='$escaped_id'" ); if ( $row =mysql_fetch_assoc( $res )){ $this ->query( "update `session` set `timetamp`=UTC_TIMESTAMP() where `sessionid`='$escaped_id'" ); return $row [ 'data' ]; } return "" ; } public function write( $id , $data ){ $query = "replace into `session` (`sessionid`,`data`,`ip`,`timestamp`) values ('%s','%s','%s',UNIX_TIMESTAMP(UTC_TIMESTAMP()))" ; $this ->query(sprintf( $query ,mysql_escape_string( $id ),mysql_escape_string( $data ), $_SERVER [ "REMOTE_ADDR" ])); } public function destroy( $id ){ $escaped_id =mysql_escape_string( $id ); $res = $this ->query( "delete from `session` where `id`='$escaped_id'" ); return (mysql_affected_rows( $res )==1); } public function gc( $lifetime ){ $this ->query( "delete from `session` where UNIX_TIMESTAMP(UTC_TIMESTAMP())-`timestamp` > $lifetime" ); } public function query( $query ){ $res =mysql_query( $query , $this ->conn); return $res ; } } ?>3.测试程序, 代码如下:
<?php include ( './CustomSession.class.php' ); CustomSession::getInstance(); session_start(); $_SESSION [ 'username' ]= 'feng' ; print_r( $_SESSION ); ?>运行测试程序后,查看数据库可以发现session表中已经增加了session记录.
查看更多关于php怎么把session保存到MySql数据库中 - php会话的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did26933