设置一个cookie永不过期

看看有关设置cookie的php文档,我发现我可以设置cookie的到期date。 您可以将cookie设置为在浏览器会话结束时或将来的某个时间过期,但我没有看到将cookie设置为永不过期的方法。 这甚至是可能的,这是如何完成的?

所有的cookies都按照cookie规范过期,所以这不是PHP的限制。

使用遥远的未来date。 例如,设置一个在十年内过期的cookie:

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

请注意,如果您在PHP中设置了过去2038年的date,则该数字将环绕,您将得到一个即时过期的cookie。

最大值:2147483647

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

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

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

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

另请参阅关于cookie的RFC :

 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年龄 :

如果一个caching接收到的值大于它所能表示的最大正整数,或者它的任何年龄计算溢出,它必须发送一个值为2147483648(2 ^ 31)的Age头。

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

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

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

使用绝对时间比根据接受的答案推荐的相对于现在计算它更好。

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

 2147483647 = 2^31 = ~year 2033 

我的特权使我无法对第一篇文章发表评论,因此不得不到这里。

从现在的date提前20年设置时应考虑到2038年的unix bug ,这是正确的答案。

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

虽然这不是完全可能的,但是你可以做一些类似于Google所做的事情,并将你的Cookie设置为2038年1月17日到期,或者等同于遥远的事情。

在所有的实际情况中,你可能会更好地设置你的cookie 10年或60 * 60 * 24 * 365 * 10,这应该超过你的cookie将生活的大部分机器。

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

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

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

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

我相信没有办法让cookie永远持续下去,但是你只需要把它设置到远期,比如2100年。

你不能但是如果你设置过期时间到现在+100年?

你不应该这样做,那也不可能,如果你想要的话,你可以设置一个更大的价值,比如10年前。

顺便说一下,我从来没有见过这样的要求的cookies:)

我不确定,但没有在浏览器closuresCookie被删除? 我以某种方式做了一个永不过期的cookie和铬识别过期date为“在浏览器closures”…