好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php怎么把session保存到MySql数据库中 - php会话

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会话的详细内容...

  阅读:41次