php专区

 首页 > php专区 > 正则表达式 > php怎么把session保存到MySql数据库中 - php会话

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

分享到:
【字体:
导读:
          session我们多半是保存在服务器中,但是今天有一个功能就是需要把session保存在数据库中,这样可以实现同ie多浏览了,php中session默认的存储方式是硬盘,php也可以改变默认的存储方式,主要使...

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

session我们多半是保存在服务器中,但是今天有一个功能就是需要把session保存在数据库中,这样可以实现同ie多浏览了,php中session默认的存储方式是硬盘,php也可以改变默认的存储方式,主要使用到session_set_save_handler方法,下面分享下如何将session保存到MySql数据库中的具体代码.

1.建session表,代码如下:

  1. CREATE TABLE `session` ( 
  2.   `sessionid` varchar(128) NOT NULL, 
  3.   `uid` int(11) NOT NULL, 
  4.   `data` mediumblob NOT NULL, 
  5.   `timestamp` int(11) NOT NULL, 
  6.   `ip` varchar(15) NOT NULL, 
  7.   PRIMARY KEY  (`sessionid`), 
  8.   KEY `time_session` (`timestamp`,`sessionid`) 
  9. ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
  10. //uid 是保留字段 

2.自定义session类,代码如下:

  1. class CustomSession{ 
  2.  private static $db_host="localhost"
  3.  private static $db_user="root"
  4.  private static $db_password=""
  5.  private static $database="session"
  6.  
  7.  private $conn
  8.  
  9.  public static function getInstance(){ 
  10.   static $instance=null; 
  11.   if($instance==null){ 
  12.    $instance=new CustomSession(); 
  13.   } 
  14.  
  15.   return $instance
  16.  } 
  17.  
  18.  public function __construct(){ 
  19.   session_set_save_handler( 
  20.   array($this,"open"), 
  21.   array($this,"close"), 
  22.   array($this,"read"), 
  23.   array($this,"write"), 
  24.   array($this,"destroy"), 
  25.   array($this,"gc"
  26.   ); 
  27.  } 
  28.  
  29.  public function __destruct(){ 
  30.   session_write_close(); 
  31.  } 
  32.  
  33.  public function open(){ 
  34.   $this->conn=mysql_connect(CustomSession::$db_host,CustomSession::$db_user,CustomSession::$db_password); 
  35.   mysql_select_db(CustomSession::$database,$this->conn); 
  36.  } 
  37.  
  38.  public function close(){ 
  39.  
  40.   mysql_close($this->conn); 
  41.  } 
  42.  
  43.  public function read($id){ 
  44.   $escaped_id=mysql_escape_string($id); 
  45.   $res=$this->query("select * from `session` where `sessionid`='$escaped_id'"); 
  46.   if($row=mysql_fetch_assoc($res)){ 
  47.    $this->query("update `session` set `timetamp`=UTC_TIMESTAMP() where `sessionid`='$escaped_id'"); 
  48.    return $row['data']; 
  49.   } 
  50.   return ""
  51.  } 
  52.  
  53.  public function write($id,$data){ 
  54.   $query="replace into `session` (`sessionid`,`data`,`ip`,`timestamp`) values ('%s','%s','%s',UNIX_TIMESTAMP(UTC_TIMESTAMP()))"
  55.   $this->query(sprintf($query,mysql_escape_string($id),mysql_escape_string($data),$_SERVER["REMOTE_ADDR"])); 
  56.  } 
  57.  
  58.  public function destroy($id){ 
  59.   $escaped_id=mysql_escape_string($id); 
  60.   $res=$this->query("delete from `session` where `id`='$escaped_id'"); 
  61.   return (mysql_affected_rows($res)==1); 
  62.  } 
  63.  
  64.  public function gc($lifetime){ 
  65.   $this->query("delete from `session` where UNIX_TIMESTAMP(UTC_TIMESTAMP())-`timestamp` > $lifetime"); 
  66.  } 
  67.  
  68.  public function query($query){ 
  69.   $res=mysql_query($query,$this->conn); 
  70.   return $res
  71.  } 
  72.  
  73. ?> 

3.测试程序,代码如下:

  1. include('./CustomSession.class.php'); 
  2. CustomSession::getInstance(); 
  3. session_start(); 
  4. $_SESSION['username']='feng'
  5. print_r($_SESSION); 
  6. ?> 

运行测试程序后,查看数据库可以发现session表中已经增加了session记录.

分享到:
php 中cookie和session的用法比较 - php...
php 中cookie和session的用法比较 cookie和session最大的区别一个是保存在服务器上,一个是保存在客户端电脑中,cookie安全性不如session而session用多了会占机器资源. 1、cookie数据存放在客户的浏览器上,session数据放在服务器上. 2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进...
php中session放cookie优缺点分析 - php会...
php中session放cookie优缺点分析 现在有很多朋友在做网站安全验证时会把session存放在cookie中,这样我们就对一些数据进行加密处理,那么他们这样做的优缺点是什么及有那些安全问题呢?下面我们一起来对比一下. 这篇文章不是讨论session,也不是cookie,现在很多网站都是讲session放cookie中,...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……