【发布时间】:2019-01-23 14:15:26
【问题描述】:
我已将 cookie 生命周期设置为持续一整天,但在 15-20 分钟的空闲时间后,我还是会退出。最奇怪的是,在 localhost 上一切正常,但是当我上线我的网站时,我开始使用相同的代码遇到这个问题。
我在 stackoverflow 上读到它可能与 session.gc_maxlifetime 相关,所以我什至在 .htaccess 级别上对其进行了编辑。我已经把它从1440改成了86400,但是问题依旧。
这是我的代码的概要。
当用户登录时,我会检查用户是否已经拥有一个名为“AUTHID”的 cookie。如果用户这样做,我先删除它。
if (isset($_COOKIE['AUTHID'])) {
unset($_COOKIE['AUTHID']);
setcookie('AUTHID', null, -1, '/');
}
之后,根据用户是否选择记住我选项,我设置了 cookie 的生命周期值,它会创建一个我可以在 Chrome 设置中看到的 cookie,并且具有绝对正确的过期时间。
session_name('AUTHID');
ini_set('session.cookie_httponly', 1);
if(isset($_POST['remember-me'])) {
ini_set('session.gc_maxlifetime', 604800);
session_set_cookie_params(604800,"/");
} else {
ini_set('session.gc_maxlifetime', 86400);
session_set_cookie_params(86400,"/");
}
session_start();
最后,我有一个 php 函数来检查用户是否在每个页面上都登录:
$rel_url = "$_SERVER[REQUEST_URI]";
session_name('AUTHID');
session_start();
if(!isset($_SESSION['user_id'])) {
if (strpos($rel_url, 'login=success') !== false) {
header('Location: index.php');
}
header('Location: login-with-bg.php?access-denied=logged-out');
exit();
}
这在我的本地主机上工作得很好,但是当我在我的托管服务器上上传这段代码时,即使 cookie 仍在以正确的到期日期创建,但如果我的浏览器空闲 15-20 分钟,我的会话就会得到时间到。
编辑:从一篇文章中,我想到了每 10 分钟左右进行一次 AJAX 调用,并且在浏览器打开时有效。但是,我需要一个完整的方法,即使浏览器关闭也能正常工作。
EDIT2:用于保持会话活动的 AJAX 代码:
function keep_alive() {
$.get('index.php',null)
}
keep_alive_interval = setInterval(keep_alive, 600000)
【问题讨论】:
标签: php session cookies session-cookies