session.gc_maxlifetime不适合我

时间:2010-01-14 13:22:31

标签: php

我想将会话超时限制设置为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();   //更新上次活动时间戳

3 个答案:

答案 0 :(得分:7)

三个变量用于定义PHP会话变量的垃圾收集行为:

  1. session.gc_maxlifetime是会话的生命周期(秒) 文件(默认值:1440 = 24分钟)
  2. session.gc_probability是 执行垃圾收集器概率的提名者 (默认= 1)
  3. session.gc_divisor是该分会的分母 执行垃圾收集器的概率(默认值= 100或1000)
  4. 分子和分母一起用来确定概率(分母/分母)。因此,当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)

只要文件留在服务器的文件系统上,会话就会生效。他们被垃圾收集器清理干净。垃圾收集器在服务器上运行大约每百页负载(这是相当随机的,“每百个”页面加载只是平均值)。

此外,会话的年龄是无效年龄,而不是总年龄。每次用户提出请求时,计时器都将重置该会话。