Google Chrome会话Cookie的解决方法

时间:2017-06-15 15:44:28

标签: 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小时”,如果用户关闭标签并在一小时内重新打开,则会出现问题。

建议?

1 个答案:

答案 0 :(得分:0)

从stackoverflow上的其他帖子中获取以及关于重新运行应用程序的问题的评论,我在1小时后将一些帖子结合起来清除cookie和会话变量。

信用:

  • Best way to completely destroy a session - even if the browser is not closed
  • http://php.net/manual/en/function.setcookie.php
  • {{3}}

    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