php中session默认的存储方式是硬盘,php也可以改变默认的存储方式。
主要使用到session_set_save_handler方法,下面分享下如何将session保存到mysql数据库中的具体代码。
1.建session表
代码如下 复制代码
create table `session` (
`sessionid` varchar(128) not null,
`uid` int(11) not null,
`data` mediumblob not null,
`timestamp` int(11) not null,
`ip` varchar(15) not null,
primary key (`sessionid`),
key `time_session` (`timestamp`,`sessionid`)
) engine=myisam default charset=utf8;
uid 是保留字段
2.自定义session类
代码如下 复制代码
conn=mysql_connect(customsession::$db_host,customsession::$db_user,customsession::$db_password);
mysql_select_db(customsession::$database,$this->conn);
}
public function close(){
mysql_close($this->conn);
}
public function read($id){
$escaped_id=mysql_escape_string($id);
$res=$this->query(select * from `session` where `sessionid`='$escaped_id');
if($row=mysql_fetch_assoc($res)){
$this->query(update `session` set `timetamp`=utc_timestamp() where `sessionid`='$escaped_id');
return $row['data'];
}
return ;
}
public function write($id,$data){
$query=replace into `session` (`sessionid`,`data`,`ip`,`timestamp`) values ('%s','%s','%s',unix_timestamp(utc_timestamp()));
$this->query(sprintf($query,mysql_escape_string($id),mysql_escape_string($data),$_server[remote_addr]));//www.111cn.net
}
public function destroy($id){
$escaped_id=mysql_escape_string($id);
$res=$this->query(delete from `session` where `id`='$escaped_id');
return (mysql_affected_rows($res)==1);
}
public function gc($lifetime){
$this->query(delete from `session` where unix_timestamp(utc_timestamp())-`timestamp` > $lifetime);
}
public function query($query){
$res=mysql_query($query,$this->conn);
return $res;
}
}
?>
3.测试程序
代码如下 复制代码
运行测试程序后,查看数据库可以发现session表中已经增加了session记录
