没有有效期的Javascript Cookie


142

我想设置一个永不过期的cookie。那有可能吗?

 document.cookie = "name=value; expires=date; path=path;domain=domain; secure";

我不想使日期过长,我只是想知道cookie上的expires参数是否有一个值,该值告诉它永不过期。

谢谢。


1
您为什么不希望增加日期?
AnthonyWJones

13
约会大会让我觉得自己好像在作弊。如果那是唯一的方法,我想我必须把日期定大。
Jose Vega

Answers:


169

不。不能做 这样做的“方法”只是使到期日期类似于2030年。


31
只有四年了。希望您更新了​​cookie。
antony.ouseph.k

160
2020年-cookiepocalypse
JeffreyPia

14
该死,它每年都越来越近,希望您的代码已经更新。
kartsims

22
现在已编辑到2030年,我们将厄运推迟了10年
Simeon Nakov

7
因此,基本上,在2038年1月19日,Chewie将坐在千禧猎鹰号上,再次抱怨银河地图API上的cookie政策弹出窗口
nickhar '18

108

没有您想要的语法。不设置过期将导致cookie在会话结束时过期。唯一的选择是选择一些任意大的值。请注意,某些浏览器的日期超过2038(unix纪元时间超过32位int)时会遇到问题。


25
确切地说,是2038-01-19,03:14:08 UTC。
威廉·克洛普

需要澄清的是:这是一条规则,在每个浏览器中的工作方式都一样吗?这意味着,如果我未设置到期日期,则Cookie只会持续到会话结束。
Silver Ringvee '16

2
不带Expiresor Max-Age指令创建的cookie 是会话cookie:在客户端关闭时将其删除。但是,Web浏览器可能会使用会话还原,这会使大多数会话Cookie保持永久状态,就像从未关闭过浏览器一样。(资料来源:MDN
mfluehr

67

您可以在Mozilla docs上作为示例:

 document.cookie = "someCookieName=true; expires=Fri, 31 Dec 9999 23:59:59 GMT";

聚苯乙烯

当然,如果人类在10000年的第一分钟仍然使用您的代码,就会出现问题:)


88
您确定是星期五吗?
大卫,


5
使用npmjs.com/package/universal-cookie对我不起作用。与2038年解决方案一起使用。我写了一张票,打算在2030年回来,看看是否有解决办法。
辛里奇

15

所有Cookie均按照Cookie 规范到期,您可以设置的最大值为

 2^31 - 1 = 2147483647 = 2038-01-19 04:14:07

因此,最大Cookie寿命为

$.cookie('subscripted_24', true, { expires: 2147483647 });

7
这个数字对我不起作用。经过一番反复试验,我可以使用的最高编号是99983090(到期时间=星期五,275760年9月12日18:10:24 GMT)。更高的内容返回“无效的日期”
JeffreyPia

如果将数字as expires参数传递给jquery-cookie或js-cookie,则将其视为从现在开始过期的天数。如果要固定日期,则必须传递Date对象。
达里奥·塞德尔

上面的代码使用了jquery-cookie插件,该插件已退役,转而支持js-cookie
詹斯

2
香草JS:document.cookie = 'subscripted_24=true; expires=' + new Date(2147483647 * 1000).toUTCString();
Oksana Romaniv,

12

您可以将Cookie设置为一个月左右的到期日期,然后在用户再次访问该网站时重新分配该Cookie。


1
这是设置无尽Cookie的正确答案。并且,如果您需要考虑到用户从不关闭站点,则可以实施其他条件,以通过任何操作或在一定时间后更新cookie。
亚历克斯·欣克

9

如果您未设置到期日期,则Cookie将在用户会话结束时到期。我建议在unix纪元时间延长之前通过32位整数使用日期。要将其放入Cookie中,您将使用document.cookie = "randomCookie=true; expires=Tue, 19 Jan 2038 03:14:07 UTC;,假设这randomCookie是您要设置的cookie,并且true它是各自的值。


2

你不能。没有用于设置永久Cookie的确切代码,但是可以使用旧的技巧,例如current time + 10 years

请注意,任何超出January 2038cookie 范围的日期(32位int)都将注定您将被立即删除。希望奇迹将在不久的将来得到解决。对于64位int来说,几年左右2110是安全的。随着时间的推移,软件和硬件将发生变化,也许永远不会适应旧的(我们现在拥有的东西),所以准备的,现在未来

请参阅2038年的问题


3
我认为您没有意识到64位计算机可以算作多远的未来,即2920亿年
Gust van de Wal,

@GustvandeWal是吗?我已经读过了。我什至在我的答案中包含了该链接。
rhavendc

1
根据您的回答:对于64位int,大约2110年将是安全的。这似乎令人怀疑,就像您期望64位计算机的计数是32位计算机的两倍一样(1970-> 2035-> 2110)
Gust van de Wal,

@GustvandeWal对不起,如果我的话听起来可疑。也许这不是用英语表达的最佳方式。但是,嘿,我没想到也没有想到您刚才说的那种想法。
rhavendc

4
一个小小的注意事项:如果我们要使用33位处理器,那么2110年就有意义了。
hegez

1

如果打算仅从客户端读取数据,则可以使用本地存储。仅当清除浏览器的缓存时,才会将其删除。


或关闭浏览器或关闭计算机
Redwolf Programs 18-10-27

@RedwolfPrograms自从何时关闭浏览器或关闭计算机时会清除本地存储?
IgorJerosimić19年

@IgorJerosimić糟糕!我想我以为是因为我的一个站点中的一个错误...
Redwolf Programs

-2

您可以通过将cookie设置为任意日期加上比当前年份多的日期来使cookie永无止境,如下所示:

var d = new Date();    
document.cookie = "username=John Doe; expires=Thu, 18 Dec " + (d.getFullYear() + 1) + " 12:00:00 UTC";

1
它将在一年后到期,而不是无限期地终止(AFAIK)。
所罗门·乌科
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.