PHP将session信息存储到数据库的类实例
本文实例讲述了PHP将session信息存储到数据库的类。分享给大家供大家参考。具体分析如下:
SessionHandlerInterface接口是PHP内置的接口,直接实现就行了
具体可以看php手册关于session_set_save_handler函数的解释!
PHP代码如下:
/** *session信息存储到数据库的类 *表结构: *CREATETABLEIFNOTEXISTS`sessioninfo`( * `sid`varchar(255)NOTNULL, * `value`textNOTNULL, * `expiration`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP, * PRIMARYKEY(`sid`) *)ENGINE=InnoDBDEFAULTCHARSET=utf8; */ classMySessionHandlerimplementsSessionHandlerInterface{ /** *@accessprivate *@varobject数据库连接 */ private$_dbLink; /** *@accessprivate *@varstring保存session的表名 */ Private$_sessionTable; /** *@accessprivate *@varstringsession名 */ private$_sessionName; /** *@const过期时间 */ constSESSION_EXPIRE=10; publicfunction__construct($dbLink,$sessionTable){ if(!is_object($dbLink)){ returnfalse; } $this->_dbLink=$dbLink; $this->_sessionTable=$sessionTable; } /** *打开 *@accesspublic *@paramstring$session_save_path保存session的路径 *@paramstring$session_namesession名 *@returninteger */ publicfunctionopen($session_save_path,$session_name){ $this->_sessionName=$session_name; return0; } /** *关闭 *@accesspublic *@returninteger */ publicfunctionclose(){ return0; } /** *关闭session *@accesspublic *@paramstring$session_idsessionID *@returnstring */ publicfunctionread($session_id){ $query="SELECTvalueFROM{$this->_sessionTable}WHEREsid={$session_id}ANDUNIX_TIMESTAMP(expiration)+".self::SESSION_EXPIRE.">UNIX_TIMESTAMP(NOW())"; $result=$this->_dbLink->query($query); if(!isset($value)||empty($value)){ $value=""; return$value; } $this->_dbLink->query("UPDATE{$this->_sessionTable}SETexpiration=CURRENT_TIMESTAMP()WHEREsid={$session_id}"); $value=$result->fetch_array(); $result->free(); return$value['value']; } /** *写入session *@accesspublic *@paramstring$session_idsessionID *@paramstring$session_datasessiondata *@returninteger */ publicfunctionwrite($session_id,$session_data){ $query="SELECTvalueFROM{$this->_sessionTable}WHEREsid='{$session_id}'ANDUNIX_TIMESTAMP(expiration)+".self::SESSION_EXPIRE.">UNIX_TIMESTAMP(NOW())"; $result=$this->_dbLink->query($query); $result=$result->fetch_array(); if(!empty($result)){ $result=$this->_dbLink->query("UPDATE{$this->_sessionTable}SETvalue={$session_data}WHEREsid={$session_id}"); } else{ $result=$this->_dbLink->query("INSERTINTO{$this->_sessionTable}(sid,value)VALUES('{$session_id}','{$session_data}')"); } if($result){ return0; } else{ return1; } } /** *销魂session *@accesspublic *@paramstring$session_idsessionID *@returninteger */ publicfunctiondestroy($session_id){ $result=$this->_dbLink->query("DELETEFROM{$this->_sessionTable}WHEREsid='{$session_id}'"); if($result){ return0; } else{ return1; } } /** *垃圾回收 *@accesspublic *@paramstring$maxlifetimesession最长生存时间 *@returninteger */ publicfunctiongc($maxlifetime){ $result=$this->_dbLink->query("DELETEFROM{$this->_sessionTable}WHEREUNIX_TIMESTAMP(expiration)<UNIX_TIMESTAMP(NOW())-".self::SESSION_EXPIRE); if($result){ return0; } else{ return1; } } } $dbLink=newmysqli("localhost","root","root","test"); $sessionTable="sessioninfo"; $handler=newMySessionHandler($dbLink,$sessionTable); session_set_save_handler($handler); session_start(); $_SESSION['name']="test"; echo$_SESSION["name"]; //session_destroy();
希望本文所述对大家的php程序设计有所帮助。