没有过期日期的 Javascript Cookie

Posted

技术标签:

【中文标题】没有过期日期的 Javascript Cookie【英文标题】:Javascript Cookie with no expiration date 【发布时间】:2010-10-06 16:00:46 【问题描述】:

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

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

我不想让日期变得非常大,我只是想知道 cookie 上的 expires 参数是否有一个值告诉它永不过期。

谢谢。

【问题讨论】:

你为什么不想把日期变大? 把日期变大让我感觉好像我在作弊。如果这是唯一的出路,我想我将不得不把日期调大。 【参考方案1】:

不。那是做不到的。做到这一点的最佳“方法”就是将到期日期设为 2100 年。

【讨论】:

只剩下四年了。希望您更新了​​ cookie。 2020 - 饼干末日之年 妈的,一年比一年近,希望你的代码更新了。 现在编辑到 2030 年,我们将末日再推迟 10 年 所以,基本上,2038 年 1 月 19 日,Chewie 将坐在千年隼号上,再次抱怨银河地图 API 上的 cookie 政策弹出窗口......【参考方案2】:

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

【讨论】:

2038-01-19, 03:14:08 UTC,准确地说。 只是为了澄清:这是一个规则,在每个浏览器中都以相同的方式工作吗?这意味着如果我不设置过期日期,cookie 将只持续到会话结束。 在没有ExpiresMax-Age 指令的情况下创建的cookie 是会话cookie:它在客户端关闭时被删除。但是,网络浏览器可能会使用会话恢复,这会使大多数会话 cookie 成为永久性的,就好像浏览器从未关闭一样。 (source: MDN)【参考方案3】:

您可能会在一个月的到期日期或某天设置一个 cookie,然后在每次用户再次访问该网站时重新分配该 cookie

【讨论】:

这是设置无限cookie的正确答案。如果您需要考虑到用户永远不会关闭网站,您可以通过任何操作或在特定时间后实现更新 cookie 的附加条件。【参考方案4】:

你可以在Mozilla docs上做例子:

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

附言

当然,如果人类在 10000 年的第一分钟仍然使用你的代码,那将是一个问题 :)

【讨论】:

你确定今天是星期五吗? google.com/…* 使用npmjs.com/package/universal-cookie 对我不起作用。使用year 2038 solution。我写了一张 2030 年回来的票,看看是否有解决办法。【参考方案5】:

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

【讨论】:

【参考方案6】:

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

【讨论】:

或者浏览器关闭或者电脑关机 @RedwolfPrograms 从什么时候开始,当浏览器关闭或计算机关闭时,本地存储会被清除? @IgorJerosimić 哎呀!我想我认为这是因为我的网站中的一个错误......【参考方案7】:

所有 cookie 根据 cookie specification 过期,您可以设置的最大值为

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

所以最大 cookie 生命周期是

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

【讨论】:

那个号码对我不起作用。经过一番反复试验,我能够使用的最高数字是 99983090(过期=Fri, 12 Sep 275760 18:10:24 GMT)。任何更高的返回“无效日期” 如果将数字作为 expires 参数传递给 jquery-cookie 或 js-cookie,则从现在开始过期。如果你想要一个固定的日期,你必须传递一个 Date 对象。 以上代码使用了jquery-cookie插件,该插件已被js-cookie取代。 原版 JS:document.cookie = 'subscripted_24=true; expires=' + new Date(2147483647 * 1000).toUTCString(); @JeffreyPia 你可以多花几个小时,直到Sat, 13 Sep 275760 00:00:00 GMT。与众不同。【参考方案8】:

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

请注意,January 2038 以外的任何日期都将注定您的 cookie(32-bit int)将被立即删除。希望奇迹能在不久的将来得到解决。对于 64 位整数2110 周围的年份将是安全的。随着时间的推移,软件和硬件会发生变化,并且可能永远不会适应旧的(我们现在拥有的东西)所以为未来准备现在

见Year 2038 problem

【讨论】:

我想你没有意识到how far into the future a 64 bit computer can count,即2920亿年 @GustvandeWal 是吗?我已经读过了。我什至在我的答案中包含了该链接。 根据您的回答:对于 64-bit int,2110 年左右的年份将是安全的。这看起来很可疑,就像您期望 64 位计算机的计数是 32 位计算机的两倍(1970 -> 2035 -> 2110) @GustvandeWal 对不起,如果我的话听起来可疑。也许这不是用英语表达的最佳方式。但是,嘿,我没想到或想到你刚才所说的那种想法。 一个小提示:如果我们使用 33 位处理器,那么 2110 年是有意义的。

以上是关于没有过期日期的 Javascript Cookie的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat 中带有过期日期的 JSESSIONID Cookie

cookie使用

浏览器会话结束时 Cookie 过期

浏览器cookie那些事儿

JavaScript Cookie

JavaScript设置Cookie午夜过期