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

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

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

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

谢谢。

【问题讨论】:

  • 你为什么不想把日期变大?
  • 把日期变大让我感觉好像我在作弊。如果这是唯一的出路,我想我将不得不把日期调大。

标签: javascript cookies


【解决方案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 年的第一分钟仍然使用你的代码,那将是一个问题 :)

【讨论】:

【解决方案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 年是有意义的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多