没有过期日期的 Javascript Cookie

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

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

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

谢谢。

220927 次浏览

不,那是不可能的,最好的办法就是把截止日期定在2100年。

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

你可以设置一个 cookie 在一个月或一些过期日期,然后每次用户再次访问网站时重新分配 cookie

你可以像 Mozilla 文档上的例子那样做:

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

附注

当然,如果人类仍然在10000年的第一分钟使用你的代码,那就会有问题了:)

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

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

所有 Cookie 按 Cookie 规格过期,可以设置的最大值为

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

所以最长的 Cookie 生存时间是

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

你就是不能。没有确切的代码来设置永久 cookie,但是一个老的技巧就可以了,比如 current time + 10 years

只是一个注意,任何日期超过 January 2038将注定你的 cookie (32位 int)将被立即删除。希望奇迹能在不久的将来发生。对于 64位 int来说,在 2110周围几年是安全的。随着时间的推移,软件和硬件将发生变化,可能永远不会适应旧的(我们现在有的东西) ,所以准备 现在未来

参见 2038年问题

如前所述,不设置过期日期将给您带来完全相反的结果,因为浏览器将在会话结束时删除它。 所以你必须设定一个截止日期,以确保它持续下去。

但是从09/2022开始,Chrome 将 cookie 的最大使用期限限制为400天(https://chromestatus.com/feature/4887741241229312) :

When cookies are set with an explicit Expires/Max-Age attribute the value will now be capped to no more than 400 days in the future. Previously, there was no limit and cookies could expire as much as multiple millennia in the future.


Motivation


The draft of rfc6265bis now contains an upper limit for Cookie Expires/Max-Age attributes. As written:
"The user agent MUST limit the maximum value of the [Max-Age/Expiration] attribute. The limit MUST NOT be greater than 400 days (34560000 seconds) in duration. The RECOMMENDED limit is 400 days in duration, but the user agent MAY adjust the limit to be less. [Max-Age/Expiration] attributes that are greater than the limit MUST be reduced to the limit."


400 days was chosen as a round number close to 13 months in duration. 13 months was chosen to ensure that sites one visits roughly once a year (e.g., picking health insurance benefits) will continue to work.

所以,400天是你能争取到的最大寿命。