【问题标题】:PHP - Prevent Users from Being Logged OutPHP - 防止用户被注销
【发布时间】:2012-03-26 08:43:13
【问题描述】:

在这个网站上,我遇到了用户可能需要在很长一段时间内登录的情况(在某些情况下,可能需要几天、几周,甚至几个月)。问题是我在服务器日志中看到他们经常没有登录,因此尝试连接会导致被重定向到登录页面。

顺便说一下,这是每分钟自动连接的客户端。

似乎他们在某些情况下被注销(停电?计算机进入睡眠状态?其他网络中断?)。通常,用户每分钟都会连接到服务器,因此他们应该能够保持登录状态,是吗?我让一个连接运行了几天,并一直保持登录状态。

我的相关会话设置是:

session.cache_expire       180
session.cookie_lifetime    0
session.gc_maxlifetime     1440
session.use_cookies    On
session.use_only_cookies   Off

登录状态的检查由 Zend Framework 的Zend_Auth 处理。让我保持登录超过一天意味着我没有遇到 cache_expire 限制或 gc_maxlifetime,对吗?

我可以模拟似乎正在发生的注销的唯一方法是建立连接(建立会话)然后让计算机在一夜之间脱机。当我第二天再次上网并且客户端尝试继续连接时(它会自动执行此操作),我发现我已注销。

所以我的问题。

  1. 我是否评估了客户端可能被注销的原因 正确吗?

  2. 如果是(或者即使不是),我能做些什么来防止这些注销?大幅扩展各种会话时间控制设置?

【问题讨论】:

  • 可能会删除一个表明用户已登录的 cookie,然后进行检查?
  • 看看samy.pl/evercookie - 这确实令人讨厌,但可以完成工作:)

标签: php zend-framework session


【解决方案1】:

你的问题是session.cookie_lifetime 0 这基本上意味着会话cookie只会在客户端关闭浏览器之前处于活动状态。您可以将其设置为像一年这样的高值。

更多详情请见the PHP documentation

【讨论】:

  • 这听起来很有希望。顺便说一下,这些设置都是“默认”设置。我没有意识到默认是这样的。
  • @gaoshan88 确实这应该是您的解决方案。您基本上甚至不会在将此设置为零的情况下种植 cookie。这只是一个浏览器会话。设置为 60*60*24*30 并使其持续一个月(或更长时间)...
  • @Shackrock 当然会有 cookie。在我的回答和 PHP 文档中,这一切都得到了正确的解释。
  • @Basti 过期的 cookie 不是 cookie =)
  • 生命周期为 0 的 Cookie 永不过期。当用户关闭浏览器时,它们会被删除。
【解决方案2】:

我认为您的评估听起来很合理,但我怀疑注销与电网有关,可能更多与本地化防火墙、cookie 设置或动态 IP 问题有关?

您是否考虑过使用 ajax 在幕后不断更新会话时间?这个方法我用过好几次了:

这就是我找到这个想法的地方。这是对问题的简洁处理。

http://brian.moonspot.net/2008/05/14/php-session-cookie-refresh/

希望对您有所帮助! 一个

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-30
    • 2022-11-06
    • 2021-10-21
    • 2017-07-29
    • 1970-01-01
    • 2014-11-16
    • 2022-12-14
    • 1970-01-01
    相关资源
    最近更新 更多