查看关于设置cookie的php文档,我看到我可以为cookie设置过期日期。您可以将cookie设置为在浏览器会话结束时过期,或者在将来的某个时间过期,但我不知道如何将cookie设置为永不过期。这可能吗?这是如何实现的?
当前回答
你不应该这样做,这是不可能的,如果你愿意,你可以设置一个更大的值,比如10年以后。
顺便说一句,我从来没有见过有这样要求的饼干:)
其他回答
根据cookie规范,所有cookie都会过期,因此这不是PHP的限制。
使用一个遥远的未来日期。例如,设置一个十年过期的cookie:
setcookie(
"CookieName",
"CookieValue",
time() + (10 * 365 * 24 * 60 * 60)
);
注意,如果您在32位PHP中设置了超过2038的日期,则该数字将被换行,您将得到一个立即过期的cookie。
你不应该这样做,这是不可能的,如果你愿意,你可以设置一个更大的值,比如10年以后。
顺便说一句,我从来没有见过有这样要求的饼干:)
设定遥远未来的绝对时间:
setcookie("CookieName", "CookieValue", 2147483647);
使用绝对时间比按照公认答案中建议的相对于当前计算时间要好。
与32位系统兼容的最大值为:
2147483647 = 2^31 = ~year 2038
最大值:2147483647
setcookie("CookieName", "CookieValue", 2147483647);
为了避免整数溢出,时间戳应该设置为:
2^31 - 1 = 2147483647 = 2038-01-19 04:14:07
设置较高的值可能会在旧浏览器中出现问题。
也可以查看RFC关于cookie的内容:
信息=值 可选的。Max-Age属性的值是delta-seconds, cookie的生存期,以秒为单位,非负十进制 整数。为了正确地处理缓存的cookie,客户端应该 根据年龄计算,计算cookie的年龄 HTTP/1.1规范[RFC2616]中的规则。当年龄是 大于delta-seconds seconds,客户端应该丢弃 饼干。值为0表示cookie应该被丢弃 立即。
和RFC 2616, 14.6年龄:
如果缓存接收到的值大于最大的正数 整数它可以表示,或者它的任何年龄计算 溢出时,它必须传输一个Age报头,其值为 2147483648(2 ^ 31)。
http://www.faqs.org/rfcs/rfc2616.html
如果你想在客户端机器上永久保存数据——或者至少直到浏览器缓存完全清空,使用Javascript本地存储:
https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorage
不要使用会话存储,因为它会像最大年龄为0的cookie一样被清除。
推荐文章
- 在PHP单元测试执行期间,如何在CLI中输出?
- 在PHP中使用heredoc的优势是什么?
- PHP中的echo, print和print_r有什么区别?
- HttpOnly cookie如何与AJAX请求一起工作?
- 如何将XML转换成PHP数组?
- 如何将对象转换为数组?
- 从IP地址获取位置
- 获取数组值的键名
- HTTPS和SSL3_GET_SERVER_CERTIFICATE:证书验证失败,CA is OK
- PHP -获取bool值,当为false时返回false
- 在foreach中通过引用传递
- 如何触发命令行PHP脚本的XDebug分析器?
- 如何找出如果你使用HTTPS没有$_SERVER['HTTPS']
- 更好的方法检查变量为null或空字符串?
- 当使用Composer的开发/生产开关时,如何正确部署?