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程序设计有所帮助。