PHP - 防止用户被注销

时间:2012-03-08 21:02:41

标签: php zend-framework session

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

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

看来他们在某些情况下正在退出(停电?计算机进入睡眠状态?其他一些网络中断?)。通常,用户每分钟都与服务器建立连接,因此他们应该能够保持登录状态,是吗?我离开连接运行了几天,并在整个时间内保持登录状态。

我的相关会话设置是:

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. 如果是这样(或者即使没有),我该怎么做才能防止这些注销?大规模扩展各种会话时间控制设置?

2 个答案:

答案 0 :(得分:4)

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

有关详细信息,请参阅the PHP documentation

答案 1 :(得分:1)

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

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

这是我发现这个想法的地方。这是对问题的简洁处理。

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

希望有所帮助! 甲