gpt4 book ai didi

PHP session 不会过期。曾经

转载 作者:搜寻专家 更新时间:2023-10-31 21:11:01 25 4
gpt4 key购买 nike

我正在将我的应用程序转移到另一台服务器,但我遇到了一些似乎没有过期的 PHP session 问题。

在 php.ini 中我设置了:

session.gc_probability = 1
session.gc_divisor = 1
session.gc_maxlifetime = 300

当然,Cookie 是启用的。而且,5 分钟后,如果我刷新页面,我仍然处于登录状态。即使我关闭浏览器并重新打开页面。 编辑:实际上,关闭浏览器似乎确实清除了 session 。

由于每个 请求首先通过某个脚本 (RewriteRule/begin.php),我很幸运,我可以解决这个问题:

session_start();
if (time() > @$_SESSION['sessionLimit']) {
session_destroy();
session_start();
}
$_SESSION['sessionLimit'] = time() + ini_get('session.gc_maxlifetime');

但是,我仍然不明白我做错了什么以及为什么在旧服务器中一切都很好(即使 session.gc_divisor 设置为 10)。

旧服务器:Windows Server 2003、Apache 2.4、PHP 5.4.5,均为 32 位

新服务器:Windows Server 2008 R2、Apache 2.4、PHP 5.5.4,全部 64 位

最佳答案

请看这个答案:How do I expire a PHP session after 30 minutes?

Gumbo 比我更好地解释了这件事。

特别是,Gumbo 解释了为什么 session.gc_maxlifetime 不可靠,他建议自己实现 session 超时,使用一个简单的时间戳表示最后一次事件(即请求)的时间,并更新每个请求的时间戳:

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
// last request was more than 30 minutes ago
session_unset(); // unset $_SESSION variable for the run-time
session_destroy(); // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp

关于PHP session 不会过期。曾经,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19421464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com