在这个网站上,我有一种情况,用户可能需要在很长一段时间内登录(在某些情况下,几天,几周,甚至几个月)。问题是我在服务器日志中看到他们经常最终没有登录,因此尝试连接会导致重定向到登录页面。
顺便说一句,这是自动连接每一分钟的客户端。
看来他们在某些情况下正在退出(停电?计算机进入睡眠状态?其他一些网络中断?)。通常,用户每分钟都与服务器建立连接,因此他们应该能够保持登录状态,是吗?我离开连接运行了几天,并在整个时间内保持登录状态。
我的相关会话设置是:
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,对吗?
我可以模拟似乎正在发生的注销的唯一方法是建立连接(建立会话),然后让计算机在一夜之间离线。当我第二天再次上线并且客户端试图继续连接时(它自动执行此操作)我发现我已经注销了。
所以我的问题。
我是否评估了客户可能会被注销的原因 正确吗
如果是这样(或者即使没有),我该怎么做才能防止这些注销?大规模扩展各种会话时间控制设置?
答案 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/
希望有所帮助! 甲