关于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
看了一下果
会话函数参考:http://www.hur.cn/special/PHP5/fancy/ref.session.html
英文参考: http://cn.php.net/manual/en/session.configuration.php
主要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。
看完这些资料起初并没有什么疑问。但是想说实践出真知于是就自己动手试试看是不是这样子的。
首先我建立了一个文件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
看了一下果
会话函数参考:http://www.hur.cn/special/PHP5/fancy/ref.session.html
英文参考: http://cn.php.net/manual/en/session.configuration.php
主要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。
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/5328/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2012-6-13 16:46
评论列表
2012-10-20 14:46 | dabai
大哥 怎么看到最后也没看明白啊 一直是没清理掉啊 找到了session文件的存放目录后又怎么测试了呢 我也遇到这样的情况了 一直没清理掉 gc_probability/gc_divisor = 1/1 是=1的 测试用
分页: 1/1 1