PHP 会话过期 - 何时刷新


PHP Session Expiration - When does it refresh?

我正在使用会话过期设置为 1,800 秒的 Zend。我想知道每次我代表用户从浏览器向服务器发出请求时以及当用户加载新页面时,此会话过期时间是否会刷新回 1,800 秒,还是只是在用户加载新页面时刷新?

当用户加载新页面时,即浏览器代表用户向服务器发出请求。所以你上面画的两个场景是一回事。

当会话启动时,会话ID被发送到浏览器,浏览器通常将其存储在cookie中。然后,浏览器使用 cookie 将会话 ID 传递给服务器,并为每个请求识别用户。服务器会跟踪会话何时过期,此区域可能会变得有点棘手(请参阅如何在 30 分钟后使 PHP 会话过期?

但是,只要您使用相同的浏览器发出请求,那么在您给出的两种情况下,会话过期就会刷新。

保存会话 ID(以及源自目标服务器的所有其他 Cookie(的 Cookie 与您向服务器发出的每个请求一起传输,无论是页面刷新还是 ajax 调用。

所以是的,会话会在与服务器进行任何交互时刷新。

基本上这取决于很多事情。主要取决于浏览器和浏览器版本。你可以阅读这篇文章: 如何在 30 分钟后使 PHP 会话过期?

当你执行 session_start(( 如果是第一次调用时,服务器将会话信息保存在/tmp 文件夹中的文件中,并向您的浏览器发送具有此文件标识符的 cookie,否则服务器将获取 cookie 标识符并加载文件信息。在 php 配置中,此 cookie 的持续时间默认为 30 分钟。

您可以在 php 中增加此 cookie 的时间.ini或者使用ini_set函数或 .htacces 文件中手动设置指令。您只需设置指令session.cookie_lifetime。这些值是秒数,或者如果设置为 cookie,则在您关闭浏览器之前有效

另一种可能的解决方案是为用户创建一个令牌系统,例如,您手动向浏览器发送一个cookie,该cookie在令牌宽度(大的随机键,保存在带有用户ID字段的数据库表中(2个月后过期。当会话不可用时,您可以检查 cookie 是否存在,然后可以使用 cookie 令牌手动重新创建会话登录以查找用户。