PHP ini_set会话gc_maxlifetime无法正常工作

and*_*ytt 3 php session ini-set

我想在PHP中设置gc_maxlifetime.

这是'header.php'中的代码,我在每个页面都包含它.

ini_set('session.cookie_lifetime', 1);
ini_set('session.gc_maxlifetime', 1);
session_start();
Run Code Online (Sandbox Code Playgroud)

我测试一下

echo ini_get('session.gc_maxlifetime');
Run Code Online (Sandbox Code Playgroud)

它确实设置为1.

但它仍然保持登录状态,也就是说,会话没有被删除.

可能的原因是什么?

han*_*ank 5

垃圾收集为什么不运行?

GC并不总是在每个请求上运行,默认的PHP设置是它有1%的机会运行GC.session.gc_probability(默认1)/ session.gc_divisor(默认100)= 0.01(1%几率)

相关手册条目:http://php.net/manual/en/session.configuration.php#ini.session.gc-probability

我的建议是存储上次触摸会话的时间,并在每次加载页面时检查该值,如果已经过了足够的时间,则将session_destroy用户重定向到登录页面.