PHP实现session保存到mysql数据库中
session.class.php--session类<?php
class session {
private $_lifetime; //session过期时间
private $_dbhandler; //mysql连接资源
private $_userid; //用户id
private $_domain = ".suntest.com"; //cookie作用域
private $_table = "sessions"; //表名
function __construct($dbhandler, $lifetime=1440, $userid=0){
$this->_lifetime = $lifetime;
$this->_dbhandler = $dbhandler;
$this->_userid = $userid;
ini_set("session.cookie_domain", $this->_domain);
@ini_set('session.save_handler', 'user');
session_set_save_handler(array(&$this,'open'), array(&$this,'close'), array(&$this,'read'), array(&$this,'write'), array(&$this,'destroy'), array(&$this,'gc'));
if (!session_id()){
session_start();
}
}
function open($save_path, $session_name){
return true;
}
function close(){
return true;
}
function read($id){
$result = $this->_dbhandler->selectSqlRow("SELECT SessionData FROM $this->_table WHERE SessionId='$id'");
return $result?$result['SessionData']:'';
}
function write($id, $data){
$time = time();
$ip = addslashes(getIp());
$data = addslashes($data);
$data = strlen($data)>500?$data = '':$data;
$endtime = $time+$this->_lifetime;
$sql="replace into $this->_table(SessionId,UserId,Ip,LastVisit,Expiration,SessionData)
values('$id','$this->_userid','$ip','$time','$endtime','$data')";
return $this->_dbhandler->querySql($sql);
}
function destroy($id){
return $this->_dbhandler->querySql("DELETE FROM $this->_table WHERE SessionId='$id'");
}
function gc($maxlifetime){
return $this->_dbhandler->querySql("DELETE FROM $this->_table WHERE Expiration
}
}
数据库表结构CREATE TABLE `sessions` (
`SessionId` varchar(32) NOT NULL,
`UserId` int(10) unsigned NOT NULL DEFAULT '0',
`Ip` varchar(100) DEFAULT NULL,
`LastVisit` int(10) unsigned NOT NULL DEFAULT '0',
`Expiration` int(10) unsigned NOT NULL DEFAULT '0',
`SessionData` varchar(500) NOT NULL,
PRIMARY KEY (`SessionId`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8 COMMENT='session';