1、按默认方式测试。
推荐先把session手册上的函数看看。
首先修改php.ini文件中的一些配置,把session.save_path修改下,方便调式。比如我修改成“E:/PCTI/TMP”。保存重启apache。
书写测试文件test.php
<?
error_reporting(E^ALL);
session_start();
$_SESSION['username']='test';
?>
<a href='next.php'>next</a>
next.php
<?
session_start();
print_r($_SESSION);
print_r($_COOKIE);
?>
在浏览器中访问。
首先,打开我们设置的session保存路径,比如我的是E:/PCTI/TMP,果然在里面产生了一个文件。文件名是sess_****,而且****恰好是$_COOKIE['PHPSESSID']。
和我想象中的一样。
2、测试session_set_save_handler
首先删除了session保存文件夹中的session文件。
这里我使用的是手册里面的例子。
<?php
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)
{
return true;
}
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
session_start();
// proceed to use sessions normally
$_SESSION['username']='test';
?>
<a href='next.php'>next</a>
重新设置了。。结果和刚才一样。呵呵,那我们怎么知道我们自定义session处理成功了呢?
修改下保存session的文件名看看,把代码中的$sess_file = "$sess_save_path/sess_$id";都改成$sess_file = "$sess_save_path/my_new_sess_$id";重新运行看看。
哟,果然改变了。说明自定义session处理成功。



