关于php的session文件垃圾回收机制。我已经在网上看了不少资料。大致是说session过期并不会马上清除session文件,而是每次有请求过来的时候根据session.gc_probability/session.gc_divisor的值为概率去遍历以便session目录下的session文件看是否存在过期的session文件,如果过期则清楚。
看完这些资料起初并没有什么疑问。但是想说实践出真知于是就自己动手试试看是不是这样子的。
首先我建立了一个文件test.php:
ini_set('session.gc_maxlifetime','1');
session_start();
$_SESSION['uid']="123";
还有另外一个文件tt.php:
session_start();
echo $_SESSION["uid"];
php.ini中:(后面测试中这个文件的内容都一样)
session.gc_probability = 1
session.gc_divisor = 100
先请求test.php然后隔5秒再请求test.php。结果显示123。这说明session数据并没有被清除掉
再来一种情况:
test.php:
ini_set('session.gc_maxlifetime','1');
session_start();
$_SESSION['uid']="123";
php.ini中:
session.gc_probability = 1
session.gc_divisor = 1
先请求test.php然后隔5秒再请求test.php。结果显示123。这说明session数据并没有被清除掉
然后再来测试一下:
test.php:
ini_set('session.gc_maxlifetime','1');
session_cache_expire(1);
session_start();
php.ini中:
session.gc_probability = 1
session.gc_divisor = 1
先请求test.php然后隔5秒再请求test.php。结果显示123。还是没有清理掉,我还以为可以了呢。看来再瞎测下去也不是办法,如果能找到session文件所在磁盘位置再来测试效果会好一些。终于让我找到了,我的php.ini里面的session.save_path是注释掉的。所以它会默认存到个人的临时目录文件夹下C:\Documents and Settings\syx\Local Settings\Temp
看了一下果
主要Session在PHP.ini里的配置项如下:
session.gc_probabilityintegersession.gc_probability 与 session.gc_divisor 合起来用来管理 gc(garbage collection 垃圾回收)进程启动的概率。默认为 1。详见 session.gc_divisor。 session.gc_divisorintegersession.gc_divisor 与 session.gc_probability 合起来定义了在每个会话初始化时启动 gc(garbage collection 垃圾回收)进程的概率。此概率用 gc_probability/gc_divisor 计算得来。例如 1/100 意味着在每个请求中有 1% 的概率启动 gc 进程。session.gc_divisor默认为 100。