Chrome不会删除会话Cookie


188

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

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

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

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

Chrome浏览器只是忽略过期规则吗?

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


1
这与我的帖子中的内容完全相同,即没有过期,不确定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不能。
绿色的

Answers:


222

3
而且我尝试使用换行符很好地格式化我的注释,但是愚蠢的系统也删除了这些换行符...来吧,Stackoverflow,使系统更好!我花时间使我的评论更易读,对读者有帮助,然后您首先愚蠢地认为我是垃圾邮件发送者,然后删​​除换行符,从而破坏了它!
杰斯珀(Jesper)2012年

2
注意:如果在“启动Firefox”下拉菜单中选择了“显示上次显示我的窗口和选项卡”,则在Firefox中可能会遇到完全相同的问题。为了同样的原因。按照设计,将保留会话cookie,以在浏览器崩溃时帮助保持工作流程。
webnesto 2012年

40
对。因此,Chrome和FF都破坏了会话Cookie的功能。对于chrome,已经报告了该问题:code.google.com/p/chromium/issues/detail? id=128513并标记为WONTFIX。显然,Google不会在Chrome中遵循网络标准和安全漏洞,FF也不会。请参阅FF错误(至少没有关闭):bugzilla.mozilla.org/show_bug.cgi ? id=443354这两个浏览器的状态令人遗憾。
lucian303

4
w3.org/Protocols/rfc2109/rfc2109:Max-Age默认行为是在用户代理退出时丢弃cookie。
lucian303

2
@ lucian303,虽然这看起来确实像是在违反标准,但我认为如果没有“保持会话cookie存活”,就无法拥有“从上次继续浏览”的功能。例如,Opera,rekonq和IE9(通过“新标签页”中的“重新打开上一个会话”链接)实现了前者而没有后者。结果,此类浏览器会向您显示缓存的页面,这些页面错误地指示您仍在登录和/或已停止使用CSRF保护令牌。
sayap 2013年

25

我对cookie设置了相同的问题,该cookie设置为在“浏览会话结束”时过期。

不幸的是,它并没有让我玩一些浏览器的设置。

原来,关闭浏览器时记住打开的选项卡的功能是问题的根源。(该功能的名称为“启动时”-“我离开的地方继续”。至少在当前版本的Chrome上)。

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


这立即为我解决了问题!很高兴知道事情为什么会以这种方式发生:)
快速反应

5
不能接受 我不想让Chrome忘记打开了哪些窗口,因为我经常无意中退出并打开了许多标签页。(感谢OS X让我滚动了没有焦点的窗口,使我认为它确实具有焦点。但是,情况有所不同)。如果我必须重新登录,就这样吧。故意退出时不注销我,将很难确保我仍未登录,这可能是一个很大的安全问题。
迈克尔

5
至少默认情况下未启用此选项。Google帮助中还提到了此“功能” :“ Chrome还将还原您的浏览数据和会话cookie。 ”。IMO,这应该是“在我离开的地方继续”下的另一个子选项。
MrWhite 2014年

顺便说一句,这似乎不再是Opera的“问题”(经过Opera 22的测试,尽管我没有注意到这至少是一个或两个版本的问题)。当选中相应的“从上次显示我的窗口和选项卡”时,Firefox 29将还原会话cookie(根据文档)。
怀特·MrWhite

2
@Michael并没有多大意义,因为大多数使用会话的网站都不允许您退出登录页面。那么,您是否希望浏览器继续从上次中断的地方继续?
德吉

21

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

在高级设置下,我未选中,'Continue running background apps when Google Chrome is closed'并且我的会话Cookie会按预期工作。

对于我们所有一直在编码的开发人员而言,仍然期望他们在完成浏览后清除会话cookie,这在后面一直是一个痛苦。


通常,“后台应用程序”与会话cookie持久性无关(除非您的扩展名能记住会话cookie ?!)。设置中的“从我离开的地方继续”选项还可以还原会话Cookie(如另一个答案中所述)。
MrWhite 2014年

1
在禁用该选项后,它可以正常工作了,我的会话Cookie清除了!
Walid Ammar 2014年

这确实是导致不删除会话cookie的另一个原因。谢谢。
4

10

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

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

但是,我认为Chrome应该在启动时检查并删除以前的会话Cookie,而不要关闭它。


10

在Chrome的高级设置下,我都必须未经检查地将两者都选中:

  • “关闭Google Chrome浏览器后继续运行后台应用程序”
  • “从我离开的地方继续”,“启动时”

应该将其投票较高,或者应编辑最佳答案以包括“正在运行的后台应用程序”。这影响了我。关闭“从我离开的地方继续”并不能解决问题。我还必须关闭“关闭Google Chrome浏览器后继续运行后台应用程序”。然后,当我关闭Chrome时,我的会话Cookie被正确删除。
马特·韦尔克

我认为这确实是最好的答案。
4

3

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


9
不,如果选中了“从我上次中断的地方继续”,则它在两次重启之间仍然存在。
Olli 2014年

TimDog:“ sessionStorage将在重新启动之间保留。” @Olli“否,它在重新启动之间确实存在”。伙计们,您同意还是争论?我不明白:)啊,等等,我明白了
naXa

2

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



1

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

启用Clear cookies and site data when you quit Chrome

为我工作


-2

如果您为php会话cookie设置了域,则浏览器似乎会将其保留30秒钟左右。关闭选项卡或浏览器窗口似乎并不重要。

因此,如果您使用以下类似方式管理会话,则可能会导致Cookie在浏览器中的挂起时间超出预期。

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

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

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


-2

我只是遇到了Chrome存储会话ID的问题,但我不喜欢禁用从上次中断的位置继续执行此选项的想法。我查看了网站的Cookie,并找到了登录页面的会话ID Cookie。删除并不能解决我的问题。我搜索域,发现域上还有另一个会话ID cookie。手动删除两个会话ID cookie可以解决此问题,并且我没有关闭并重新打开可能已恢复cookie的浏览器。



-8

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

设定Cookie

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

错误的方式,将不起作用(注意PATH丢失)

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

正确的方法解决了谷歌浏览器上的问题

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

1
问题不是关于不正确的cookie。
约翰K,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.