假设我的 php.ini 文件中有这些设置(当然不是“正常”设置):
session.gc_maxlifetime = 60
session.gc_probability = 1
session.gc_divisor = 1
这意味着在每次 session 初始化时,垃圾收集将运行并清除所有早于一分钟的 session 。
假设只有一个用户连接到服务器并运行初始化 session 的脚本。如果他/她在 70 秒(或超过 60 秒)后再次运行它,他/她自己的 session 是否会被删除?
换句话说,垃圾回收发生在脚本执行之前还是之后?
最佳答案
垃圾收集应该在运行脚本之前发生。这是正确的行为。我的意思是, session 应该在 gc_maxlifetime
之后的任何时刻过期。 PHP 应该在运行脚本之前进行垃圾收集,以确保其正常工作。
不过我很好奇,就尝试了一下,我的测试证实了我的推测。
这是一个简单的测试。使用给定的设置,我测试了存储在 session 中的变量在 X 秒后是否存在,但事实并非如此。所以垃圾收集是在运行脚本之前完成的。
注意:如果您使用 cookie,您还必须将 session cookie 生命周期设置为过期。
关于php - php的垃圾回收能否删除启动脚本的session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15959512/