PHP 如何设置一个30分钟过期的Session?
答案
设置
seesion.cookie_lifetime
时间30
分钟, 并设置session.gc_maxlifetime
也为30
分钟.自己为每一个Session值增加Time stamp.
每次访问之前, 判断时间戳.
答案解析
PHP端的session涉及到php.ini中的几个配置:
session.save_path
:Session文件保存的位置,Linux下默认在/tmp
目录下。session.gc_maxlifetime
:Session值在经过这个时间后会被标记为垃圾,默认是1440
秒,也就是24
分钟。session.gc_probability
:Session垃圾回收概率分子,默认是1
。session.gc_divisor
:Session垃圾回收概率分母,默认是100
。session.cookie_lifetime
:用以保存Session名称的Cookie的过期时间,默认是0
,也就是直到浏览器重启。
连贯起来说就是,在默认配置下,
每个session值在赋值后,会在
24
分钟后被标记为垃圾,不过也只是被标记,session文件并不会从/tmp
目录下删除。如果在24分钟之前session又有值写入,那么标记为垃圾的时间再往后移动。
如果此时客户端浏览器关闭,客户端的
Cookie["PHPSESSID"]
被销毁,但是服务器下的session值并不会因此被标为垃圾,session文件也依然还在,不会被删除。当PHP服务器收到一个请求,执行一次
1÷100
,也就是1%
的概率计算,如果计算结果是true
,执行session垃圾回收,从/tmp
下删除所有标为垃圾的session文件;如果计算结果是false
,不执行垃圾回收,等待下一次请求。
由此可见,如果PHP接收的请求很频繁,或者配置概率增大,那么这个session过期时间用session.gc_maxlifetime
就比较准确,但是服务器的压力就会相应增加。