过期时间为“会话结束”的Cookie何时过期?


78

有一个带有过期时间的会话cookie,其中显示“会话结束”。它确切何时到期或将永远存在?


4
这完全取决于用户代理,即用户的浏览器,但通常,这确实是在关闭浏览器时进行的。
caw 2016年

Answers:


48

当您使用时setcookie,您可以将过期时间设置为,也可以0简单地省略参数-cookie将在会话结束时(即,当您关闭浏览器时)过期。


情况是:-我有两个页面使用不同的cookie。一个设置为在30分钟后过期,另一个设置为在会话结束时。假定两个cookie都处于活动状态,但是我正在查看的页面设置了30分钟,而我已经有一段时间没有转到另一个页面了。这是什么意思?是否类似于未浏览页面的关闭浏览器?
Shakti Singh,2010年

6
请原谅我,我不明白这个问题:/页面A的cookie的过期时间= 0,页面B的cookie的过期时间= 30分钟。这意味着,如果您关闭浏览器,cookie A将被删除,而cookie B将保留。如果您在30分钟内没有关闭浏览器,则Cookie B将过期,但Cookie A将保持活动状态。即使cookie B在您浏览页面B时过期,在大多数情况下也不会发生任何事情,因为在您重新加载页面或访问同一站点中的另一个页面后,cookie可能会重新创建。我希望至少其中一些可以回答您的问题:|
mingos 2010年

@mingos我想知道为什么当我仅关闭选项卡时会丢失cookie。我以为应该在关闭浏览器时死掉?
IPSDSILVA

请注意,我10年前发布了原始答案。那时,并不是所有浏览器都存在浏览器选项卡之间的进程分离(我当时认为只有Chrome浏览器具有此功能,尽管我不确定Firefox是否100%)。因此,从本质上讲,关闭浏览器等同于“结束运行浏览器的进程”,而不能保证关闭选项卡。如今,选项卡是一个独立的过程,我敢打赌这就是您所要解决的问题:关闭选项卡后,您将结束该过程,因此将清除临时数据和会话存储。
mingos

1
跟进:我只是在猜测,所以在上面的评论中加一粒盐。总而言之,我认为我们可以就以下事实达成共识:“浏览会话”在浏览器和设备之间没有明确定义,因此它是以一种无法预测的方式实现的。请与该线程中的其他答案进行比较。
mingos

67

从用户的角度来看,“在会话结束时过期”的cookie意外地过期!

在带有Safari的iOS上,只要您切换应用,它们就会过期!

在装有Chrome的Android上,关闭浏览器时它们不会过期。

在运行Chrome的Windows桌面上,当您关闭浏览器时,它们会过期。那不是当您关闭网站的标签时;当您关闭所有标签时。如果还有其他浏览器窗口打开,它们也不会过期。如果用户将Web应用程序作为窗口运行,他们甚至可能不知道它们是浏览器窗口。因此,您的Cookie的寿命取决于用户使用某些看似无关的应用程序所执行的操作。


1
这不是我在iOS(10.2.1)上的观察
Myster

1
@Myster感谢您的观察。我的观察来自旧版本。iOS 10.2.1有什么作用?
詹姆斯

1
我只想补充一点,它不会在Mac版Chrome上过期。尽管我将其设置为“继续您离开的地方”。但是,我已经关闭了该域的浏览器标签,然后重新启动了Chrome。我设置的会话cookie仍然存在。
bonbon.langes

这很有用。
Raimonds

1
是否有一个很好的网站记录了不同的行为?
Benedikt

13

只是为了纠正mingos的答案:

如果将到期时间设置为0,则将根本不会创建Cookie。我至少已经在Google Chrome上进行了测试,并将其设置为0就是结果。我猜该cookie在创建后立即失效。

要设置cookie以使其在浏览会话结束时过期,只需完全忽略expiration参数即可。

例:

代替:

document.cookie = "cookie_name=cookie_value; 0; path=/";

写就好了:

document.cookie = "cookie_name=cookie_value; path=/";

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.