我最近发现,如果有人在 Chrome 中选中“从我离开的地方继续”,cookie 和 sessionStorage 会在浏览器重新启动之间持续存在。此外,一些主题讨论即使关闭浏览器后 Chrome 后台进程仍保持打开状态。来自 Stackoverflow 和许多其他网站的一个接一个接一个线程有很多人在问同样的问题,但实际上没有人发布真正的问题解决方案。 Chrome not clearing SESSION COOKIES on close/exit
我想也许我可以检测到他们关闭了窗口/选项卡,但这也不起作用:javascript detect browser close tab/close browser
我在 Chrome 中检查了这个问题,发现有人已经报告了这个问题,发现他们没有计划解决这个问题:https://bugs.chromium.org/p/chromium/issues/detail?id=128513
另见此处:Chrome doesn't delete session cookies
如果选中“从我离开的地方继续”并且我不能指望最终用户更改该设置,则在 javascript 中使用 sessionStorage 也将在关闭选项卡和窗口之间持续存在。
互联网仍在继续,所以我想知道解决这个问题的方法是什么?
我读过的一篇文章说他们开始将 cookie 的有效期设置为 1 小时:http://erlycoder.com/111/google-chrome-session-cookie-expiration-issue-feature-your-personal-data-is-insecure-now-
当然,我可以在我的 cookie 上设置到期日期,但即使我将值设置为“1 小时”,如果用户关闭选项卡并在一小时内重新打开它,也会出现问题。
建议?
最佳答案
从 stackoverflow 上的其他帖子以及对我关于重新运行应用程序的问题的评论,我结合了一些帖子以在 1 小时后清除 cookie 和 session 变量。
信用:
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 3600)) {
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
if (isset($_SERVER['HTTP_COOKIE'])) {
$cookies = explode(';', $_SERVER['HTTP_COOKIE']);
foreach($cookies as $cookie) {
$parts = explode('=', $cookie);
$name = trim($parts[0]);
setcookie($name, '', time()-1000);
setcookie($name, '', time()-1000, '/');
}
}
session_unset();
session_destroy();
echo '<script>window.location= "login.php?pre_action=session_expired";</script>';
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
关于javascript - Google Chrome session Cookie 的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44571757/