设置一个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头。
设定一个遥远的将来绝对时间 :
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”…