sessionhandlerinterface接口是php内置的接口,直接实现就行了
具体可以看php手册关于session_set_save_handler函数的解释!
php代码如下:
代码如下:
/**
* session信息存储到数据库的类
* 表结构:
* create table if not exists `sessioninfo` (
* `sid` varchar(255) not null,
* `value` text not null,
* `expiration` timestamp not null default current_timestamp on update current_timestamp,
* primary key (`sid`)
* ) engine=innodb default charset=utf8;
*/
class mysessionhandler implements sessionhandlerinterface {
/**
* @access private
* @var object 数据库连接
*/
private $_dblink;
/**
* @access private
* @var string 保存session的表名
*/
private $_sessiontable;
/**
* @access private
* @var string session名
*/
private $_sessionname;
/**
* @const 过期时间
*/
const session_expire = 10;
public function __construct($dblink, $sessiontable) {
if(!is_object($dblink)) {
return false;
}
$this->_dblink = $dblink;
$this->_sessiontable = $sessiontable;
}
/**
* 打开
* @access public
* @param string $session_save_path 保存session的路径
* @param string $session_name session名
* @return integer
*/
public function open($session_save_path, $session_name) {
$this->_sessionname = $session_name;
return 0;
}
/**
* 关闭
* @access public
* @return integer
*/
public function close() {
return 0;
}
/**
* 关闭session
* @access public
* @param string $session_id session id
* @return string
*/
public function read($session_id) {
$query = select value from {$this->_sessiontable} where sid = {$session_id} and unix_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} set expiration = current_timestamp() where sid = {$session_id});
$value = $result->fetch_array();
$result->free();
return $value['value'];
}
/**
* 写入session
* @access public
* @param string $session_id session id
* @param string $session_data session data
* @return integer
*/
public function write($session_id, $session_data) {
$query = select value from {$this->_sessiontable} where sid = '{$session_id}' and unix_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} set value = {$session_data} where sid = {$session_id});
}
else{
$result = $this->_dblink->query(insert into {$this->_sessiontable} (sid, value) values ('{$session_id}', '{$session_data}'));
}
if($result){
return 0;
}
else{
return 1;
}
}
/**
* 销魂session
* @access public
* @param string $session_id session id
* @return integer
*/
public function destroy($session_id) {
$result = $this->_dblink->query(delete from {$this->_sessiontable} where sid = '{$session_id}');
if($result){
return 0;
}
else{
return 1;
}
}
/**
* 垃圾回收
* @access public
* @param string $maxlifetime session 最长生存时间
* @return integer
*/
public function gc($maxlifetime) {
$result = $this->_dblink->query(delete from {$this->_sessiontable} where unix_timestamp(expiration) if($result){
return 0;
}
else{
return 1;
}
}
}
$dblink = new mysqli(localhost, root, root, test);
$sessiontable = sessioninfo;
$handler = new mysessionhandler($dblink, $sessiontable);
session_set_save_handler($handler);
session_start();
$_session['name'] = test;
echo $_session[name];
//session_destroy();
希望本文所述对大家的php程序设计有所帮助。
