最近在使用ThinkPHP框架写一个管理系统。
在本地测试中,发现SESSION不会过期,不起作用。
试过了百度中很多的方法都解决不了,然后自己研究了一下PHP中SESSION的过期机制。
首先来看几个参数,在php.ini 配置文件中
SESSION的垃圾回收是需要根据时间来确定是否过期,过期则进行清理
session.gc_maxlifetime = 1440
那么问题来了,在测试过程中,即使把这个参数改为1,同样没有效果
下面再来看两个参数
session.gc_probability = 1
session.gc_divisor = 1000
SESSION的回收的几率等于
session.gc_probability / session.gc_divisor = 1/1000
在php的机制中,也就是有1/1000的几率触发检查session的线程。
根据当前系统时间减去session的最后修改时间,再根据session.gc_maxlifetime进行比较,如果超时则清除该session文件。
下面来修改一下该文件
把 session.gc_divisor = 1 将几率变为100%
同时把session.gc_maxlifetime = 5 将过期时间大大缩短
重启php服务,我使用两个浏览器访问做测试,
用chrome进行访问,生成session后,不再访问
再用firefox进行访问成新的session文件
5秒后(估计早就过期了)再看看chrome
SESSION的已经过期了,这说明回收效果已经实现了
=====================================================