我尝试将session.gc_maxlifetime
中php.ini
的值更改为较小的值,以便检查会话超时是否正常,但会话似乎永远不会过期。我还重新启动了apache来重新加载php.ini。
有谁知道原因是什么?
答案 0 :(得分:0)
该指令名为session.gc_maxlifetime
, gc 前缀提供了一些如何工作的提示:PHP包含一个内置的垃圾收集过程,负责物理删除过时的会话数据从磁盘。但是这个过程并没有在每个PHP请求上启动,因为这是一个不必要的开销(即使一个HTML文档也可以触发执行几十个PHP脚本)。相反,它是随机执行的。这是由另外两个以“gc _”开头的指令控制的:
从手册中引用:
session.gc_divisor
加上session.gc_probability
定义了。{ gc(垃圾收集)过程开始的概率 每个会话初始化。概率通过使用来计算 gc_probability / gc_divisor,例如1/100意味着有1%的可能性 每个请求都会启动GC流程。
所有这些意味着在流程运行之前,您无法真正了解session.gc_maxlifetime
是否得到尊重。如果你在本地开发盒中测试它,这个过程将运行很少次(不像你的实时服务器每分钟有数千次点击)。
强制它的一种快速方法是使gc_probability等于gc_divisor,因此概率变为1。