【问题标题】:PHP $_SESSION variables lifetime on serverPHP $_SESSION 变量在服务器上的生命周期
【发布时间】:2013-07-04 13:53:02
【问题描述】:

好的,所以我知道服务器上的默认会话变量持续时间是 1440 秒或 24 分钟。那么如果变量像垃圾一样消失,那么它们的目的是什么?这是否意味着我的用户每 24 分钟就会因为会话变量更新而退出?将 session.gc_maxlifetime 更改为 2 周对我来说是否明智,以便用户可以保持登录状态两周?这一切都非常令人困惑,所以我会提前感谢任何帮助!

【问题讨论】:

  • 你不使用cookies吗? gurflob.com/storage/pics/YUNO/YUNO.png
  • 我不确定会话变量是否以更流畅的方式完成了 cookie 的工作,但似乎并非如此。回到 cookie 板和数据库查询!
  • 这将花费您 25 分钟的时间来艰难地学习 - 如果您在 24 分钟后实际退出,请自行测试您的网站
  • @RoyalBg 这是一个糟糕的建议,因为这样的测试得出的任何结论都是不正确的。会话垃圾收集是基于概率的,并且通常也会受到同一服务器上其他脚本和虚拟主机的影响。
  • @chris 你提到的某人没有得到任何建议,他只是解释了操作是如何浪费他的时间的。阅读问题的第一行,谢谢

标签: php session


【解决方案1】:

这显然不是那么令人困惑,因为您是对的:会话在该时间之后(或当用户关闭浏览器时)过期,并且更改该设置将影响服务器上会话存储的生命周期。当然,每次用户访问页面时,时间都会重新设置为 24 分钟。

但如果您真的想要长期存储,请使用数据库或 cookie。您真的不应该为此使用会话,因为它们只是 会话(在英语中,这意味着访问该网站,因此直到用户关闭您的网站)。

【讨论】:

  • 谢谢这是我正在寻找的答案。我打算改用数据库。我对会议的目的感到困惑
  • -1 会话没有过期。它们可能在最少一段时间不活动后被垃圾收集。
  • @chris 这更多的是实现细节而不是一般规则。例如,如果您要使用 memcache 会话存储而不是 file,它们将在 24 分钟后过期。
【解决方案2】:

您错过了会议的重点。会话通常持续到用户关闭浏览器(这是浏览器默认删除会话 cookie 的时间点)。让会话保持打开状态 2 周意味着如果用户忘记注销,其他人可能会打开页面并登录。

会话在用户与页面的最后一次交互后 24 分钟(或任何设置)后仍处于活动状态。如果您使用 ajax,则 ajax 调用本身将扩展会话,因此在浏览器中打开页面时用户不会被注销。

“记住我”或“让我保持登录”功能是完全不同的,它通常会设置另一个 cookie(可能会在 2 周内过期)并带有一些令牌并自动登录用户并开始一个新会话。好吧,您实际上可以将会话保存在数据库中并恢复相同的会话。

请记住,会话依赖于用户浏览器中的 cookie,而此 cookie 通常是短暂的。

【讨论】:

    【解决方案3】:

    【讨论】:

      【解决方案4】:

      您可以为会话变量设置超时,但这会给您的应用程序带来不必要的问题。仍然如果你想设置超时:

      要在会话中设置一分钟超时,您可以像这样调用上述函数:

      session_start_timeout(60);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-28
        • 2013-02-05
        • 1970-01-01
        • 1970-01-01
        • 2016-09-01
        相关资源
        最近更新 更多