PHP-防止用户注销


PHP - Prevent Users from Being Logged Out

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

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

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

我的相关会话设置是:

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

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

有关更多详细信息,请参阅PHP文档。

我认为你的评估听起来很合理,尽管我怀疑注销是否与电网有关,也许更多地与本地化防火墙、cookie设置或动态IP问题有关?

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

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

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

希望能有所帮助!