谷歌浏览器无法删除会话Cookie。

224

我正在尝试像这样在JavaScript中设置会话Cookie:

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

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

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

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

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


2
正如我在帖子中所述,它没有过期,关于Httponly我不确定。我不想手动删除它。问题是浏览器应该在退出时删除它,但Chrome就是不这样做。 - mgs
我发现在Windows XP上使用Chrome会删除会话cookie。不,Windows XP上的Chrome也不会删除cookie。我现在使用Windows XP,并且发现了您的问题,因为我遇到了同样的问题。唯一的区别是我使用ZF2并通过Session包设置会话选项。但无论如何这都是常规的php方式 - ini_set("session.cookie_lifetime", 0)'remember_me_seconds' => 1。但是没有帮助。Firefox正常工作,但Chrome不行。 - Green
无法工作,退出后会话cookie未清除,Chrome v85。 - Jack Ng
14个回答

268

4
注意:如果您在Firefox选项中选择了“When Firefox starts”下拉菜单的“显示我上次打开的窗口和标签页”,则可能遇到完全相同的问题。原因相同。按设计,会保留会话Cookie以帮助在浏览器崩溃时保持工作流程。 - webnesto
54
是的,Chrome和FF都因此破坏了会话cookie功能。对于Chrome,该问题已经被报告:http://code.google.com/p/chromium/issues/detail?id=128513,并被标记为WONTFIX。显然,Google不在乎遵循Web标准和Chrome中的安全漏洞,FF也不在乎。参见FF bug(至少没有关闭):https://bugzilla.mozilla.org/show_bug.cgi?id=443354。这是这两个浏览器令人悲哀的状态。 - lucian303
6
Max-Age指定了cookie的最大存活时间,单位为秒。默认情况下,当用户代理程序(如浏览器)退出时会删除cookie。翻译完成,没有额外的内容返回。 - lucian303
4
@lucian303,虽然这看起来像是违反标准的行为,但我认为如果没有“保持会话cookie活动”,你就不能有“从上次继续浏览”的功能。例如,Opera、Rekonq和IE9(通过“在新标签页中重新打开上次会话”链接)实现了前者而不需要后者。因此,这些浏览器可能会显示已缓存的页面,错误地表明您仍然登录或具有已过期的CSRF保护令牌。 - sayap
3
为什么他们会显示缓存页面呢?这个漏洞居然一年后还没有被修复,太荒谬了! - Michael
显示剩余5条评论

27

我刚刚遇到了一个问题,有一个 cookie 的过期时间是 "浏览会话结束"。

不幸的是,它并没有实现,所以我调整了一下浏览器的设置。

结果发现,当浏览器关闭后记住已打开的选项卡的功能是问题的根源。(该功能在当前版本的 Chrome 中被命名为 "启动时" - "从上次停止的地方继续"。)

这种情况也会在 Opera 和 Firefox 中发生。


这个对我来说解决了问题!很高兴知道事情发生的原因 :) - fast-reflexes
6
不可接受。我不希望Chrome忘记打开了哪些窗口,因为我经常会不小心关闭有很多标签页的Chrome。(感谢OS X让我滚动没有焦点的窗口,导致我认为它有焦点。但这是另外一个故事)。如果我必须重新登录,那就重新登录吧。不在我刻意退出时登出,会让我难以确定自己是否仍然登录着任何地方,这可能是一个很大的安全问题。 - Michael
5
至少这个选项默认是未启用的。这个“功能”也在Google帮助中提到:“Chrome还将恢复您的浏览数据和会话cookie”。我认为这应该是“继续上次浏览的页面”下的一个附加子选项。 - MrWhite
顺便提一下,这似乎不再是Opera的“问题”了(测试了Opera 22,尽管我至少在一个版本中没有注意到它成为问题)。Firefox 29在选中相应的“显示上次打开的窗口和标签页”时恢复会话cookie(根据文档)。 - MrWhite
2
@Michael 这并不太合理,因为大多数使用会话的网站如果您已经注销,将不允许您返回到之前所在的页面。那么您是希望浏览器继续上次停止的地方还是重新开始? - Deji

23

我遇到了这个问题。我发现即使关闭了浏览器,仍然有许多Chrome进程在运行。原来这些进程都来自于我的Chrome扩展。

在高级设置中,我取消了“当Google Chrome关闭时继续运行后台应用程序”的勾选,并且我的会话Cookie开始正常工作。

对于我们所有的开发人员而言,这仍然是一个令人烦恼的问题,因为我们一直在编码并期望当用户完成浏览后会话Cookie会被清除。


通常情况下,“后台应用程序”与会话cookie的持久性无关(除非您安装了一个记住您的会话cookie的扩展程序?!)。设置中的“从上次离开的地方继续”选项也会恢复会话cookie(如另一个答案中所述)。 - MrWhite
2
它正在工作,我禁用了那个选项后,我的会话Cookie已清除! - Walid Ammar
这确实是导致会话 cookie 未被删除的另一原因。谢谢。 - L-Four

12

我必须在Chrome的高级设置中两项都取消勾选:

  • '关闭 Google Chrome 时继续运行后台应用程序'
  • "从上次离开的地方继续", "启动时"

这个问题应该得到更高的投票,或者顶部答案应该被编辑以包括“运行后台应用程序”的观点。这个问题影响了我。关闭“从上次离开的地方继续”并不能解决它。我还必须关闭“当Google Chrome关闭时继续运行后台应用程序”。然后,当我关闭Chrome时,我的会话cookie才能被正确删除。 - Matt Welke
我认为这确实是最好的答案。 - L-Four

11

可能是因为在关闭浏览器后,Chrome仍在后台运行。尝试通过以下步骤禁用此功能:

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

但我认为Chrome应该在启动时检查并删除先前的会话cookie,而不是在关闭时进行处理。


3
这个问题是由于您正在使用Chrome的 继续上次浏览的位置在关闭Google Chrome时继续运行后台应用程序 功能引起的(目前我的版本是96)。
请考虑关闭这些功能(以测试功能)。

3

一个简单的替代方法是使用新的sessionStorage对象。根据评论,如果您勾选了“从上次离开的地方继续”,则sessionStorage将在重新启动时保持不变。


11
如果你勾选了“从上次离开的地方继续”,那么它会在重新启动后保留。 - Olli
TimDog:“sessionStorage在重新启动后将会持久化存储。”@Olli:“不,它确实会在重新启动后持久化存储”。各位,你们同意还是反对?我不太明白 :) 啊,等等,我懂了… - naXa stands with Ukraine
不在Chrome 84中持久存在,“从上次离开的地方继续”标志无关紧要。 - ogostos

2

我在Windows 8.1中也遇到了与“document.cookie”相关的问题。唯一能够删除Cookie的方式是通过任务管理器关闭Chrome(这并不是一种很好的方法)。因此,我决定从后端管理Cookie或使用类似于“js-cookie”的东西。


1

你尝试过在Google Chrome中删除Hangouts扩展吗?因为它会强制Chrome保持运行状态,即使你关闭了所有窗口。

我之前也遇到这个问题,但现在已经解决了。


-2

如果您为php会话cookie设置域,浏览器似乎会保持它约30秒左右。无论您是否关闭选项卡或浏览器窗口,这似乎都没有关系。

因此,如果您正在使用以下类似的内容来管理会话,则可能会导致cookie在浏览器中挂起的时间超过预期。

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接