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