我想将会话超时限制设置为3分钟,
我在页面中使用了这个
ini_set(“session.gc_maxlifetime”,“50”); 无法正常工作
解决方案
if(isset($ _ SESSION ['LAST_ACTIVITY']) &安培;&安培; (时间() - $ _SESSION ['LAST_ACTIVITY']> 1800)){ //最后一次请求超过30分钟前 session_destroy(); //销毁存储中的会话数据 session_unset(); //为运行时取消设置$ _SESSION变量} $ _SESSION ['LAST_ACTIVITY'] = time(); //更新上次活动时间戳
答案 0 :(得分:7)
三个变量用于定义PHP会话变量的垃圾收集行为:
分子和分母一起用来确定概率(分母/分母)。因此,当session.gc_probability为1且session.gc_divisor为100时,这是1/100 = 1%。因此每个页面的1%访问(=每个session_start调用)执行垃圾收集器。
如果要测试会话的过期方式,则需要将session.gc_probability和session.gc_divisor设置为1,这样每次访问页面都会导致垃圾收集器运行。此外,您需要使用两种不同的浏览器进行测试。 当您使用第二个浏览器访问页面时(第一个浏览器的会话超时),第一个浏览器的会话将被清除。在我的测试中,当您只使用一个浏览器时,会话会自动扩展,尽管它已经过时了。
答案 1 :(得分:2)
session.gc_maxlifetime值的单位是秒。因此,您需要将其设置为180
秒以表示3分钟。
但除此之外, session.gc_maxlifetime 不可靠(有关解释,请参阅this post)。你最好自己实现这一点,让你的会话在3分钟后过期。
答案 2 :(得分:2)
只要文件留在服务器的文件系统上,会话就会生效。他们被垃圾收集器清理干净。垃圾收集器在服务器上运行大约每百页负载(这是相当随机的,“每百个”页面加载只是平均值)。
此外,会话的年龄是无效年龄,而不是总年龄。每次用户提出请求时,计时器都将重置该会话。