68、PHP自定义Session处理机制

阅读() @2018-10-29 18:16:07

大家学完PHP中的Session处理机制之后都会使用了,但是不知道这种机制背后实现的方法是什么样的?今天我来简单写一下,顺便为日后的Session数据库存储做准备。

代码如下:

PHP配置文件中session.save_handler的默认值是files,表示默认情况下用文件来存储session信息,现在我们要自定义session处理机制,所以把session.save_handler的值改成【user】;

ini_set('session.save_handler','user');
//start方法,两个参数默认分别是session存放目录和session名称
function start($path,$name){
	global $session_path,$session_name,$session_id;
	$session_path = $path;
	$session_name = $name;
	$session_id = $_COOKIE[$session_name];
	echo 'start<br/>';
	echo $session_name.'<br/>';
	echo $session_path.'<br/>';
	echo $session_id.'<br/>';
}
function read(){
	global $session_path,$session_name,$session_id,$session_file;
	$session_file = $session_path.'/'.$session_id;
	echo 'read<br/>';
	echo $session_file.'<br/>';
	return file_get_contents($session_file) ? true : false;
}
//write方法的参数分别是sessin_id和要往session文件中写入的数据
function write($sid,$data){
	global $session_path,$session_name,$session_id,$session_file;
	$session_id = $sid;
	echo 'write<br/>';
	return file_put_contents($session_file,$data) ? true : false;
}
function close(){
	echo 'close<br/>';
	return true;
}
function destroy(){
	global $session_file;
	echo 'destroy<br/>';
	unlink($session_file);
}
//$maxtime是session有效时间
function gc($maxtime){
	echo 'gc<br/>';
	foreach(glob($session_path.'/*') as $file){
//如果session最后修改时间+有效期限<当前时间,说明session已过期,就要被当作垃圾文件删除
		if(filemtime($file)+$maxtime<time()){
			unlink($file);
		}
	}
}
//开、关、读、写、卸、垃
session_set_save_handler('start','close','read','write','destroy','gc');

session_start();
$_SESSION['webname'] = '赵一鸣博客';
echo $_SESSION['webname'].'<br/>';

搞清楚session处理机制,理解session数据库存储原理就很容易了!

微信二维码
锐壳主机