Maison  >  Article  >  développement back-end  >  php session存数据库_PHP教程

php session存数据库_PHP教程

WBOY
WBOYoriginal
2016-07-13 09:48:371016parcourir

php session存数据库

这个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);
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(&#39;session.gc_maxlifetime&#39;));
      
       return @mysql_close($this->dbHandle);
   }
   function read($sessID) {
       
       $res = mysql_query("SELECT session_data AS d FROM sessions
                           WHERE session_id = &#39;$sessID&#39;
                           AND session_expires > ".time(),$this->dbHandle);
       
       if($row = mysql_fetch_assoc($res))
           return $row[&#39;d&#39;];
       return "";
   }
   function write($sessID,$sessData) {
	   
	
       
       $newExp = time() + $this->lifeTime;
       
       $res = mysql_query("SELECT * FROM sessions
                           WHERE session_id = &#39;$sessID&#39;",$this->dbHandle);
      
	   
       if($res) {
          
		   
           mysql_query("UPDATE sessions SET session_expires = &#39;{$newExp}&#39;,session_data = &#39;{$sessData}&#39; WHERE session_id = &#39;{$sessID}&#39;",$this->dbHandle);
				
           
           if(mysql_affected_rows($this->dbHandle))
               return true;
       }
       
       else {
         
           mysql_query("INSERT INTO sessions (
                         session_id,
                         session_expires,
                         session_data)
                         VALUES(
                         &#39;{$sessID}&#39;,
						 &#39;{$newExp}&#39;,
						 &#39;{$sessData}&#39;)",$this->dbHandle);
           
           if(mysql_affected_rows($this->dbHandle))
               return true;
       }
       
       return false;
   }
   function destroy($sessID) {
       
       mysql_query("DELETE FROM sessions WHERE session_id = &#39;$sessID&#39;",$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"不要被事物蒙蔽了眼睛。。。。

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1022402.htmlTechArticlephp session存数据库 这个sesison存到数据库很简单,就是根据session_id进行对数据库的CRUD操作,主要是用到了,session_set_save_handler这个方法,自...
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn