首页 > 编程 > PHP > 正文

phpsession存数据库

2020-03-22 20:21:16
字体:
来源:转载
供稿:网友
  • 这个sesison存到数据库很简单,就是根据session_id进行对数据库的CRUD操作,主要是用到了,session_set_save_handler这个方法,自定义session的执行方法,

    首先创建数据表

    CREATE TABLE `sessions` ( `session_id` varchar(255) NOT NULL, `session_expires` int(11) DEFAULT NULL, `session_data` text, PRIMARY KEY (`session_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    然后封装操作session的工具类:
    <?php//error_reporting(0);html' target='_blank'>class session {     var $lifeTime;     var $dbHandle;   function open($savePath, $sessName) {              $this->lifeTime = get_cfg_var("session.gc_maxlifetime");              $dbHandle = mysql_connect("localhost","root","root");       $dbSel = mysql_select_db("mysession",$dbHandle);              if(!$dbHandle || !$dbSel)           return false;       $this->dbHandle = $dbHandle;       return true;   }   function close() {       $this->gc(ini_get('session.gc_maxlifetime'));             return @mysql_close($this->dbHandle);   }   function read($sessID) {              $res = mysql_query("SELECT session_data AS d FROM sessions                           WHERE session_id = '$sessID'                           AND session_expires > ".time(),$this->dbHandle);              if($row = mysql_fetch_assoc($res))           return $row['d'];       return "";   }   function write($sessID,$sessData) {	   	              $newExp = time() + $this->lifeTime;              $res = mysql_query("SELECT * FROM sessions                           WHERE session_id = '$sessID'",$this->dbHandle);      	          if($res) {          		              mysql_query("UPDATE sessions SET session_expires = '{$newExp}',session_data = '{$sessData}' WHERE session_id = '{$sessID}'",$this->dbHandle);				                      if(mysql_affected_rows($this->dbHandle))               return true;       }              else {                    mysql_query("INSERT INTO sessions (                         session_id,                         session_expires,                         session_data)                         VALUES(                         '{$sessID}',						 '{$newExp}',						 '{$sessData}')",$this->dbHandle);                      if(mysql_affected_rows($this->dbHandle))               return true;       }              return false;   }   function destroy($sessID) {              mysql_query("DELETE FROM sessions WHERE session_id = '$sessID'",$this->dbHandle);             if(mysql_affected_rows($this->dbHandle))           return true;              return false;   }   function gc($sessMaxLifeTime) {              mysql_query("DELETE FROM sessions WHERE session_expires < ".time(),$this->dbHandle);              return mysql_affected_rows($this->dbHandle);   }}#对session进行测试,发现数据库中并没有存入数据只有session_id,和session_expires的数值,其实session_data是存在的只是我们看不到$session = new session();	session_set_save_handler(array(&$session,"open"),							 array(&$session,"close"),							 array(&$session,"read"),							 array(&$session,"write"),							 array(&$session,"destroy"),							 array(&$session,"gc"));			session_start();			$session->write(session_id(),json_encode(array("name"=>"gxx","pass"=>"123")));				echo $session->read(session_id());?>  这里居然不支持插图。。
    数据库数据:

    s430j9t480ocbovq6a7a0rlk22 1435054078

    session查询数据:
    JSON
    • name"gxx"
    • pass"123"不要被事物蒙蔽了眼睛。。。。

      PHP编程

      郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表