自定义session问题(session_set_save_handler)
juge 2004-01-05 08:21:45 <?php
$sess_save_path = "C:/tmp";
function open ($save_path, $session_name) {
global $sess_save_path, $sess_session_name;
$sess_save_path = $save_path;
$sess_session_name = $session_name;
return(true);
}
function close() {
return(true);
}
function read ($id) {
global $sess_save_path, $sess_session_name;
$sess_file = "$sess_save_path/sess_{$id}";
if ($fp = @fopen($sess_file, "r")) {
$sess_data = fread($fp, filesize($sess_file));
return($sess_data);
} else {
return(""); // Must return "" here.
}
}
function write ($id, $sess_data) {
global $sess_save_path, $sess_session_name;
$sess_file = "$sess_save_path/sess_{$id}";
if ($fp = @fopen($sess_file, "w")) {
return(fwrite($fp, $sess_data));
} else {
return(false);
}
}
function destroy ($id) {
global $sess_save_path, $sess_session_name;
$sess_file = "$sess_save_path/sess_$id";
return(@unlink($sess_file));
}
/*********************************************
* WARNING - You will need to implement some *
* sort of garbage collection routine here. *
*********************************************/
function gc ($maxlifetime) {
global $sess_save_path;
$all = opendir($sess_save_path);
while ($file = readdir($all)) {
$thisfile = $sess_save_path."/".$file;
if (is_file($thisfile) && ($thisfile != "a.php")) {
@unlink($thisfile);
}
}
closedir($all);
unset($all);
return true;
}
session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");
session_save_path($sess_save_path);
session_start();
// proceed to use sessions normally
$_SESSION["name"]="123456";
echo $_SESSION["name"];
?>
以上是我照着手册上的修改了的。运行其它都是一切正常,很好。但唯一一点的就是gc函数好像始终没有调用到。不知道为什么?我怎么才能让gc函数能够正常调用到。gc函数好像就是清除过期的session吧。如果这个函数不能正常被调用,那么过期session文件将得不到及时清除,session文件将会越来越多。
大家看看改如何处理,谢谢!