设置cookie永不过期

时间:2010-07-20 13:29:52

标签: php cookies

查看php documentation on setting a cookie我看到我可以设置cookie的到期日期。您可以将cookie设置为在浏览器会话结束时或将来的某个时间到期,但我没有看到将cookie设置为永不过期的方法。这是否可能,这是如何实现的?

12 个答案:

答案 0 :(得分:237)

所有Cookie都根据cookie specification到期,因此这不是PHP限制。

使用远期日期。例如,设置一个在十年内到期的cookie:

setcookie(
  "CookieName",
  "CookieValue",
  time() + (10 * 365 * 24 * 60 * 60)
);

请注意,如果您在32位PHP中将日期设置为 2038 ,则该数字将会回滚,您将获得一个即时过期的Cookie。

答案 1 :(得分:65)

最大值:2147483647

setcookie("CookieName", "CookieValue", 2147483647);

为避免整数溢出,时间戳应设置为:

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

设置较高的值可能会导致旧浏览器出现问题。

另见RFC about cookies

Max-Age=value
  OPTIONAL.  The value of the Max-Age attribute is delta-seconds,
  the lifetime of the cookie in seconds, a decimal non-negative
  integer.  To handle cached cookies correctly, a client SHOULD
  calculate the age of the cookie according to the age calculation
  rules in the HTTP/1.1 specification [RFC2616].  When the age is
  greater than delta-seconds seconds, the client SHOULD discard the
  cookie.  A value of zero means the cookie SHOULD be discarded
  immediately.

RFC 2616, 14.6 Age

  

如果缓存接收的值大于最大值         它可以表示的整数,或者它的任何年龄计算         溢出,它必须传输一个值为的Age标头         2147483648(2 ^ 31)。

http://www.faqs.org/rfcs/rfc2616.html

答案 2 :(得分:33)

设定一个遥远的未来绝对时间

setcookie("CookieName", "CookieValue", 2147483647);

最好使用绝对时间,而不是按照接受的答案中的建议计算相对于现在的时间。

与32位系统兼容的最大值是:

2147483647 = 2^31 = ~year 2038

答案 3 :(得分:13)

我的特权使我无法对第一篇文章发表评论,所以它必须要到这里。

从当前日期开始提前20年设置时,应考虑2038 unix bug的考虑因素,这是上述正确答案。

您的cookie在2018年1月19日+(20年)可能会遇到2038问题,具体取决于您最终运行的浏览器和/或版本。

答案 4 :(得分:6)

虽然这不太可能,但你可以采取类似于谷歌的做法,并将你的cookie设置为在2038年1月17日到期之前到期。

在所有实际情况中,您可能最好将cookie设置为10年或60 * 60 * 24 * 365 * 10,这应该比您的cookie所使用的大部分机器都要长。

答案 5 :(得分:6)

你不能只说一个永无止境的循环,cookie到期为当前日期+ 1所以它永远不会达到它应该过期的日期,因为它总是在明天吗?有点矫枉过正,但只是说。

答案 6 :(得分:4)

如果要永久保留客户端计算机上的数据 - 或者至少在浏览器缓存完全清空之前,请使用Javascript本地存储:

https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorage

不要使用会话存储,因为它会像最近年龄为零的cookie一样被清除。

答案 7 :(得分:1)

由于生活的不可预测性,我避免使用

Never forever 这两个词。

1 January 1970起可以使用有符号32-bit整数存储的最新时间是03:14:07 on Tuesday, 19 January 2038231-1 = 2,147,483,647之后的1 January 1970秒)。此限制称为Year 2038 problem

setCookie("name", "value", strtotime("2038-01-19 03:14:07"));

答案 8 :(得分:0)

我认为没有办法让饼干永远存在,但你只需要将它设置为远期到期,例如2100年。

答案 9 :(得分:0)

如果你将过期时间设定为现在+ 100年,你可以这样做吗?

答案 10 :(得分:0)

你不应该这样做,而且无论如何都不可能。如果你想要,你可以设定更大的价值,例如提前10年。

顺便说一句,我从未见过有这种要求的cookie:)

答案 11 :(得分:-1)

我不确定但是在浏览器关闭时没有删除cookie?我以某种方式做了一个永不过期的cookie和chrome认可的过期日期为“在浏览器关闭时”......