4

假设我的 php.ini 文件中有这些设置(这当然不是“正常”设置):

session.gc_maxlifetime = 60
session.gc_probability = 1
session.gc_divisor = 1

这意味着在每个会话初始化中,垃圾收集将运行并清理所有早于一分钟的会话。

假设只有一个用户连接到服务器并运行初始化会话的脚本。如果他/她在 70 秒(或任何超过 60 秒)后再次运行它,他/她自己的会话会被删除吗?

换句话说,垃圾回收是在脚本执行之前还是之后发生的?

4

2 回答 2

0

内置会话 GC 在会话初始化期间启动(参见 gc_divisor),即通过session_start()函数启动。当session.autostart为真时,session_start()在第一行代码之前执行。

于 2013-04-11T23:49:20.870 回答
0

垃圾收集应该在运行脚本之前进行。这是正确的行为。我的意思是,会话应该在之后的任何时候过期gc_maxlifetime。PHP 应该在运行脚本之前进行垃圾收集,以确保它正常工作。

然而,我很好奇,并尝试了它,我的测试证实了我的假设。

这是一个简单的测试。使用给定的设置,我测试了存储在 session 中的变量是否在 X 秒后存在,但事实并非如此。所以垃圾收集是在运行脚本之前完成的。

注意:如果您使用 cookie,您还必须将会话 cookie 生命周期设置为过期。

于 2013-04-11T22:23:49.740 回答