php的垃圾收集可以删除启动脚本的会话

时间:2013-04-11 21:51:26

标签: php session

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

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

这意味着在每次会话初始化时,垃圾收集将运行并清除超过一分钟的所有会话。

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

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

2 个答案:

答案 0 :(得分:0)

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

然而我很好奇,并尝试了,我的测试批准了我的推定。

这是一个简单的测试。通过给定的设置,我测试了在X秒后存储在会话中的变量是否存在,而事实并非如此。因此垃圾收集在运行脚本之前完成。

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

答案 1 :(得分:0)

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