【问题标题】:Chrome doesn't delete session cookiesChrome 不会删除会话 cookie
【发布时间】:2025-11-30 06:05:01
【问题描述】:

我正在尝试像这样在 javascript 中设置会话 cookie:

document.cookie = 'name=alex; path=/'

但即使我退出浏览器并重新启动它,Chrome 也不会删除它。

我检查了 Firefox 和 Opera,两者都按预期工作 - 它们在浏览器退出时删除会话 cookie。

Chrome 是否只是忽略了过期规则?

我检查了多个操作系统,发现会话 cookie 在 Windows XP 和 Ubuntu 中的 Chrome 上被删除,但在 Mac OSX Lion 中却没有。

【问题讨论】:

  • 这与我的帖子完全一样,即没有过期,不确定 Httponly。我不想手动删除它。问题是浏览器应该在退出时将其删除,但 Chrome 不会这样做。
  • >>> 并发现会话 cookie 在 Windows XP 中的 Chrome 上被删除。不会。在 Windows XP 中,Chrome 也不会删除 cookie。我现在使用 Windows XP 并找到了您的问题,因为遇到了同样的问题。唯一的区别是我使用 ZF2 并通过 Session 包设置会话选项。但无论如何,这是通常的 php 方式 - ini_set("session.cookie_lifetime", 0)'remember_me_seconds' => 1。但没有帮助。 Firefox 工作正常,但 Chrome 不行。
  • 不适合我,退出后会话 cookie 不清晰,chrome v85

标签: javascript session google-chrome cookies


【解决方案1】:

【讨论】:

  • 注意:如果您在选项中的“Firefox 启动时”下拉菜单中选择了“显示我上次的窗口和选项卡”,您可能会在 Firefox 中遇到完全相同的问题。出于同样的原因。按照设计,会话 cookie 会被保留,以帮助在浏览器崩溃时保持工作流程。
  • 是的。因此,Chrome 和 FF 都中断了会话 cookie 功能。对于 chrome,已报告此问题:code.google.com/p/chromium/issues/detail?id=128513 并标记为 WONTFIX。很明显,谷歌并没有在 Chrome 中遵循网络标准和安全漏洞,FF 也没有。查看 FF 错误(至少没有关闭):bugzilla.mozilla.org/show_bug.cgi?id=443354 这两个浏览器的状态真是太糟糕了。
  • w3.org/Protocols/rfc2109/rfc2109: Max-Age默认行为是在用户代理退出时丢弃cookie。
  • @lucian303,虽然这看起来确实违反了标准,但我认为如果没有“保持会话 cookie 活动”,您将无法“从上次开始浏览”。例如,Opera、rekonq 和 IE9(通过新标签页中的“重新打开上次会话”链接)实现前者,而无需后者。因此,此类浏览器可能会向您显示缓存页面,这些页面错误地表明您仍在登录和/或已过期的 CSRF 保护令牌。
  • 为什么他们会显示缓存页面呢?一年多后这个bug还没修复,真是太可笑了!
【解决方案2】:

我刚刚在“浏览会话结束”时设置为过期的 cookie 遇到了同样的问题。

不幸的是它没有,所以我玩了一下浏览器的设置。

原来在浏览器关闭时记住打开的标签的功能是问题的根源。 (该功能被命名为“启动时”-“从上次中断的地方继续”。至少在当前版本的 Chrome 上是这样)。

Opera 和 Firefox 也会出现这种情况。

【讨论】:

  • 这立即为我解决了问题!很高兴知道为什么事情会这样发生:)
  • 不可接受。我不希望 Chrome 忘记打开了哪些窗口,因为我经常在打开许多标签时不小心退出 Chrome。 (感谢 OS X 让我滚动一个没有焦点的窗口,让我认为它确实有焦点。但是,不同的故事)。如果我必须重新登录,那就这样吧。当我故意退出时不让我退出,很难确保我没有在任何地方登录,这可能是一个很大的安全问题。
  • 至少这个选项默认没有启用。 Google Help 中也提到了这个“功能”:“Chrome 还将恢复您的浏览数据和会话 cookie。”。 IMO 这应该是“从我离开的地方继续”下的一个附加子选项。
  • 顺便说一句,这似乎不再是 Opera 的“问题”(测试了 Opera 22,尽管我没有注意到它至少在一两个版本中是个问题)。 Firefox 29 会在选中相应的“显示我上次的窗口和选项卡”时恢复会话 cookie(根据文档)。
  • @Michael 这没有多大意义,因为如果您已注销,大多数使用会话的网站将不允许您返回您所在的页面。那么您是否希望浏览器从您离开的地方继续?
【解决方案3】:

我刚遇到这个问题。 我注意到,即使在我关闭浏览器后,我也有许多 Chrome 进程正在运行。原来这些都是来自我的 Chrome 扩展程序。

在高级设置下,我取消选中 'Continue running background apps when Google Chrome is closed',我的会话 cookie 开始正常工作。

对于我们所有一直在编码期望会话 cookie 会在用户完成浏览时被清除的开发人员来说,这仍然是一个痛苦。

【讨论】:

  • 通常,“后台应用程序”与会话 cookie 的持久性无关(除非您有一个可以记住会话 cookie 的扩展?!)。设置中的“从我离开的地方继续”选项也会恢复会话 cookie(如另一个答案中所述)。
  • 它工作正常,在我禁用该选项后,我的会话 cookie 被清除!
  • 这确实是导致会话cookie不被删除的另一个原因。谢谢。
【解决方案4】:

我必须在 Chrome 的高级设置下都未选中:

  • '在 Google Chrome 关闭时继续运行后台应用'
  • “从上次中断的地方继续”、“启动时”

【讨论】:

  • 这应该被投票更高,或者应该编辑最佳答案以包含“运行后台应用程序”点。这影响了我。关闭“从我离开的地方继续”并没有解决它。我还必须关闭“谷歌浏览器关闭时继续运行后台应用程序”。然后,当我关闭 Chrome 时,我的会话 cookie 被正确删除。
  • 我认为这确实是最好的答案。
【解决方案5】:

这可能是因为您关闭浏览器后 Chrome 仍在后台运行。尝试通过执行以下操作禁用此功能:

  1. 打开 chrome://settings/
  2. 点击“显示高级设置...”
  3. 向下导航到“系统”部分并禁用“在 Google Chrome 关闭时继续运行后台应用程序”。 这将强制 Chrome 完全关闭,然后删除会话 cookie。

但是,我认为 Chrome 应该在开始而不是关闭时检查并删除以前的会话 cookie。

【讨论】:

    【解决方案6】:

    一个简单的替代方法是使用新的sessionStorage 对象。根据 cmets,如果您选中了“从我离开的地方继续”,则 sessionStorage 将在重新启动之间持续存在。

    【讨论】:

    • 不,如果您选中了“从我离开的地方继续”,它确实会在重新启动之间持续存在。
    • TimDog:“sessionStorage 将在重启之间持续存在。”,@Olli “不,它确实在重启之间持续存在”。伙计们,你同意还是争论?我不明白 :) 啊,等等,我明白了...
    • 在 Chrome 84 中不存在,“从我离开的地方继续”标志无关紧要。
    【解决方案7】:

    我在 Windows 8.1 中遇到了与“document.cookie”相同的问题,Chrome 删除 cookie 的唯一方法是从任务管理器中关闭它(这不是一个真正花哨的方式),所以我决定从后端管理 cookie或使用“js-cookie”之类的东西。

    【讨论】:

      【解决方案8】:

      您是否尝试过删除 Google Chrome 中的环聊扩展程序?因为即使关闭所有窗口,它也会强制 chrome 继续运行。

      我也遇到过这个问题,但现在解决了。

      【讨论】:

        【解决方案9】:

        这个问题是因为你使用了chrome的Continue where I left offContinue running background apps when Google Chrome is closed功能(目前我的版本是96)。

        请考虑将其关闭(以测试功能)。

        【讨论】:

          【解决方案10】:

          转到chrome://settings/content/cookies?search=cookies

          启用Clear cookies and site data when you quit Chrome

          为我工作

          【讨论】:

          • 这不是清除会话 cookie 的解决方案,您正在删除每一个 cookie
          【解决方案11】:

          如果您为 php 会话 cookie 设置域,浏览器似乎会保留它 30 秒左右。关闭选项卡或浏览器窗口似乎无关紧要。

          因此,如果您使用以下方式管理会话,则可能会导致 cookie 在浏览器中挂起的时间比预期的要长。

          ini_set("session.cookie_domain", 'www.domain.com');
          

          我发现摆脱悬挂 cookie 的唯一方法是删除设置会话 cookie 域的代码行。还要注意 session_set_cookie_params() 函数。域前缀的点似乎也与问题无关。

          这可能是一个 php 错误,因为 php 在会话被销毁后会在标头中发送会话 cookie(即PHPSESSID=b855ed53d007a42a1d0d798d958e42c9)。或者这可能是服务器传播问题,但我不这么认为,因为我的测试是在私有服务器上进行的。

          【讨论】:

            【解决方案12】:

            我刚刚遇到了 Chrome 存储会话 ID 的问题,但我不喜欢禁用选项从我离开的地方继续的想法。我查看了网站的 cookie,发现登录页面的 Session ID cookie。删除它并没有解决我的问题。我搜索域,发现域上有另一个会话 ID cookie。手动删除两个会话 ID cookie 解决了问题,我没有关闭并重新打开可能已恢复 cookie 的浏览器。

            【讨论】:

              【解决方案13】:

              解决方案是使用sessionStorage,仅供参考:https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage

              【讨论】:

                【解决方案14】:

                如果您设置和取消设置 cookie 的方式不正确,Google chrome 会出现问题。这是php代码。认为这会给你一些想法。

                设置 cookie

                setcookie('userLoggedIn', 1, 0, PATH);
                

                方法错误,无法正常工作(注意缺少 PATH)

                setcookie('userLoggedIn', 0, time()-3600);
                

                正确的方法修复了谷歌浏览器上的问题

                setcookie('userLoggedIn', 0, time()-3600, PATH);
                

                【讨论】:

                • 问题不是关于不正确的cookie。