PHP 会话过期 - 它啥时候刷新?

Posted

技术标签:

【中文标题】PHP 会话过期 - 它啥时候刷新?【英文标题】:PHP Session Expiration - When does it refresh?PHP 会话过期 - 它什么时候刷新? 【发布时间】:2012-05-27 02:22:45 【问题描述】:

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

【问题讨论】:

你可以将它设置为 5 秒并进行测试。 这可能取决于您使用会话的方式以及您使用的选项和配置。 【参考方案1】:

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

当会话启动时,会话 ID 被发送到浏览器,浏览器通常将其存储在 cookie 中。然后,浏览器使用 cookie 将会话 ID 传递给服务器,以识别用户。服务器会跟踪会话何时过期,这个区域可能会有点棘手(阅读How do I expire a php session after 30 minutes?)

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

基本上这取决于很多事情。很大程度上取决于浏览器和浏览器的版本。你可以阅读这篇文章:How do I expire a PHP session after 30 minutes?

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

以上是关于PHP 会话过期 - 它啥时候刷新?的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter v3.0 Flashdata 会话在 PHP 7.4 和 XAMPP 8.0 中未过期

laravel 5.7.15 419 抱歉,您的会话已过期。请刷新并重试

过期时间为“会话结束”的 cookie 啥时候过期?

Node.js刷新session过期时间

使用 AJAX 检查 PHP 会话是不是存在或过期

如何让 PHP 会话在浏览器关闭或一段时间后过期