重写session的存储机制
实现:
定义(实现)自定义的相关的存储处理函数
将其设置为session机制需要的存储函数(告知给session机制,使用我们的函数完成存储处理)
Session机制,共需要6个存储处理函数:
Session_set_save_handler(开始处理器,结束处理器,读处理器,写处理器,删除处理,垃圾回收处理器);
建表
建立session表
表中的记录,对应session文件。
create tablesession
(
session_id varchar(40) not null default ‘’,
session_content text,
primary key(session_id)
)charset=utf8 engine=myisam;。
垃圾回收操作(gc)
在开启session机制过程中,有概率的执行垃圾回收操作。
默认的概率为1/1000
可以配置php.ini
也可设置概率:
ini_set('session.gc_probability', '1');
ini_set('session.gc_divisor','4');
上代码
<?php
function session_begin(){
$link = mysql_connect('127.0.0.1','root','root');
mysql_query('set names utf8');
mysql_select_db('session');
}
function session_end(){
echo 'end'."<br/>";
}
function session_read($sess_id){
$sql = 'select session_content from session where session_id = "$sess_id"';
$result = mysql_query($sql);
if($row = mysql_fetch_assoc($result)){
return $row;
}else{
return '';
}
}
function session_wirte($sess_id,$sess_content){
$time = time();
$sql = "replace into session(session_id,session_content,createtime)values('$sess_id','$sess_content','$time')";
mysql_query($sql);
}
function session_delete($sess_id){
$sql = "delete from session where session_id = '$sess_id'";
mysql_query($sql);
}
function session_gc($max_lifetime){
$time =time();
$sql = "delete from session where createtime < '$time'-'$max_lifetime'";
mysql_query($sql);
}
session_set_save_handler('session_begin', 'session_end', 'session_read', 'session_wirte', 'session_delete', 'session_gc');
?>