查看有关设置cookie的php文档,我看到可以设置cookie的失效日期。您可以将cookie设置为在浏览器会话结束时或将来的某个时间过期,但是我看不到将cookie设置为永不过期的方法。这有可能吗?如何实现?
$cookie->setMaxAge(2147483647);
,这是晚于2080和工作在32位和64位,与github.com/delight-im/PHP-Cookie
查看有关设置cookie的php文档,我看到可以设置cookie的失效日期。您可以将cookie设置为在浏览器会话结束时或将来的某个时间过期,但是我看不到将cookie设置为永不过期的方法。这有可能吗?如何实现?
$cookie->setMaxAge(2147483647);
,这是晚于2080和工作在32位和64位,与github.com/delight-im/PHP-Cookie
Answers:
所有cookie均按照cookie规范过期,因此这不是PHP的限制。
使用较远的日期。例如,设置一个十年内到期的cookie:
setcookie(
"CookieName",
"CookieValue",
time() + (10 * 365 * 24 * 60 * 60)
);
请注意,如果您在32位PHP中设置了2038年以后的日期,则该数字会四舍五入,并且您会获得一个cookie,该cookie立即失效。
最大值:2147483647
setcookie("CookieName", "CookieValue", 2147483647);
为避免整数溢出,时间戳记应设置为:
2^31 - 1 = 2147483647 = 2038-01-19 04:14:07
设置较高的值可能会导致旧版浏览器出现问题。
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.
如果缓存收到的值大于它可以表示的最大正整数,或者如果任何年龄计算溢出,则它必须发送一个2147483648(2 ^ 31)值的Age标头。
我的特权使我无法对第一篇文章发表评论,因此必须在此处进行评论。
应该考虑2038 Unix错误从当前日期提前20年设置时,建议将其作为上述正确答案。
根据您最终运行的浏览器和/或版本,2018年1月19日+(20年)的cookie可能会遇到2038问题。
您是否只能说一个永无止境的循环,Cookie会在当前日期+ 1之前到期,所以它永远不会达到它应该到期的日期,因为它始终是明天?有点矫kill过正,只是在说。
尽管这不可能完全实现,但是您可以执行类似于Google的操作,并将Cookie设置为2038年1月17日过期,或者相距很远。
实际上,您最好将Cookie设置为10年或60 * 60 * 24 * 365 * 10,这将使您的Cookie可以使用的大多数计算机的寿命都超过了。
如果您要永久地将数据持久保存在客户端计算机上-或至少直到浏览器缓存被完全清空之前,请使用Javascript本地存储:
https://developer.mozilla.org/zh-CN/docs/DOM/Storage#localStorage
不要使用会话存储,因为它会像最长为零的cookie一样被清除。