我使用Zend并将会话过期设置为1,800秒。我想知道每次我代表用户从浏览器向服务器发出请求时,以及当用户加载新页面时,此会话到期时间是否刷新回1800秒,或者只是在用户加载新页面时刷新新页?
答案 0 :(得分:2)
当用户加载新页面时,即浏览器代表用户向服务器发出请求。因此,您在上面描绘的两个场景是相同的。
会话启动时,会话ID将发送到浏览器,浏览器通常将其存储在cookie中。然后,浏览器使用cookie将会话ID传递给服务器,每个请求都标识用户。服务器会跟踪会话何时到期,这个区域可能会有点棘手(阅读How do I expire a PHP session after 30 minutes?)
但只要您使用相同的浏览器发出请求,会话过期就会在您给出的两种情况下刷新。
答案 1 :(得分:0)
保存会话ID的cookie(以及源自目标服务器的所有其他cookie)与您向服务器发出的每个请求一起传播,无论是页面刷新还是ajax调用。
所以是的,会话与服务器的任何交互都会刷新。
答案 2 :(得分:0)
基本上它取决于很多事情。主要是浏览器和浏览器的版本。你可以阅读这篇文章:How do I expire a PHP session after 30 minutes?
答案 3 :(得分:0)
如果是第一次调用,当你执行session_start()时,服务器将会话信息保存在/ tmp文件夹中的文件中,并向浏览器发送带有此文件标识符的cookie,否则服务器获取cookie标识符并加载文件信息。默认情况下,php配置中此cookie的持续时间为30分钟。
您可以在php.ini中增加此cookie的时间,或者使用ini_set函数或.htacces文件手动设置指令。您只需设置指令session.cookie_lifetime。在您关闭浏览器之前,这些值是秒数或设置为cookie是否有效
另一个可行的解决方案是为用户创建一个令牌系统,例如,您手动向浏览器发送一个cookie,该cookie在2个月宽度后到期(大型随机密钥,保存在带有用户ID字段的数据库表中)。当会话不可用时,检查cookie是否存在,您可以重新创建会话登录,使用cookie令牌手动查找用户。