您当前的位置: 首页 > 学无止境 > 网站建设 网站首页网站建设
会话控制 自定义SESSION处理机制
发布时间:2017-04-14 11:18:02编辑:雪饮阅读()
<?php
/**
* 后盾网 http://www.houdunwang.com
* 2011-6-18 下午04:56:29
*/
ob_start();
/*
自定义函数需要用到handler,
handler函数会发送一段文件头给浏览器,但是如果在使用这个函数之前已经有了任何输出,就会抱错,
但若开启缓冲区,那么输出将会在flush或ob_end_flush后才输出,在此之前输出将会保存在缓冲区。
*/
ini_set("session.save_handler","user");
/*
session头由用户自定义函数处理
*/
define("FIX", "hdw_");//session前缀定义
function start($path,$session_name){
global $session_path;
$session_path = $path;
}
function read($sid){
global $session_path,$session_file;
$session_file = $session_path.DIRECTORY_SEPARATOR.FIX.$sid;
/*
window与linux下路径符号不一致,所以php中有DIRECTORY_SEPARATOR内置常量自动识别
*/
return @file_get_contents($session_file);
//由于session_start时有几率清理垃圾,所以可能会导致file_get_contents无法取得文件,所以此处使用错误屏蔽。
}
function write($sid,$data){
global $session_path,$session_file;
return file_put_contents($session_file, $data)? true:false;
}
function destroy($sid){
global $session_file;
@unlink($session_file);
setcookie(session_name(),'',1,'/');
}
function close(){
return true;
}
function gc($max_time){
/*
自定义session垃圾回收
遍历session目录判断每个文件是否需要被删除。
*/
global $session_path;
foreach (glob($session_path."/*") as $file){
if(filemtime($file)+$max_time<time()){
unlink($file);
}
}
return true;
}
//传递自定义session函数的方法名,php将会使用这些方法来处理session
session_set_save_handler("start","close","read","write","destroy","gc");
session_start();
echo session_id();
$_SESSION['a1']="b";
session_destroy();
/*
调试时注意这个函数,若开启了这个函数,则指定session文件被删除
而write函数写入文件是在此之前的,所以write写入的文件会被删除了
所以你检查对应目录会以为write函数没有生效一样
*/
关键字词:session,自定义,处理机制