javascript - Google Chrome session Cookie 的解决方法

标签 javascript php google-chrome session cookies

我最近发现,如果有人在 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 变量。

信用:

  • How do I expire a PHP session after 30 minutes?
  • Best way to completely destroy a session - even if the browser is not closed
  • http://php.net/manual/en/function.setcookie.php
    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/

    相关文章:

    javascript - 如何使用适用于 Google Chrome 的 JavaScript 更改复选框的边框颜色?

    javascript - 测试 'like' 按钮是否链接到 Facebook 仅可访问服务器上的内容对域有负面影响

    php - SQL:选择多个表的计数

    php - PDO 版本的数据库故障转移?

    google-chrome - 是否可以使用 Chrome 扩展 API 确定用户个人资料?

    google-chrome - 防止 chrome 自动提示列表

    javascript - JavaScript 和编程新手。我的代码有错误吗?

    javascript - Script 标签将 Javascript 呈现为具有看似有效的 HTML 的文本

    javascript - JS中通过onclick访问对象外的方法

    php - 使用 docker 和 laravel 的 GitLab CI 无法连接到数据库