查看关于设置cookie的php文档,我看到我可以为cookie设置过期日期。您可以将cookie设置为在浏览器会话结束时过期,或者在将来的某个时间过期,但我不知道如何将cookie设置为永不过期。这可能吗?这是如何实现的?
当前回答
如果你想在客户端机器上永久保存数据——或者至少直到浏览器缓存完全清空,使用Javascript本地存储:
https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorage
不要使用会话存储,因为它会像最大年龄为0的cookie一样被清除。
其他回答
虽然这是不可能的,但你可以做一些类似谷歌所做的事情,将你的cookie设置为2038年1月17日或同样遥远的时间。
实际上,你最好将你的cookie设置为10年或60*60*24*365*10年,这应该比你的cookie所使用的大多数机器的寿命都长。
我的特权阻止我对第一篇文章发表评论,所以它必须在这里。
从当前日期提前20年设置时,应该考虑到2038 unix错误,这是上面建议的正确答案。
你的cookie在2018年1月19日(20年后)可能会遇到2038问题,这取决于你最终运行的浏览器和或版本。
你不应该这样做,这是不可能的,如果你愿意,你可以设置一个更大的值,比如10年以后。
顺便说一句,我从来没有见过有这样要求的饼干:)
最大值: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
我不确定,但cookie不是在浏览器关闭时删除的吗?我以某种方式做了一个永不过期的cookie和chrome识别过期日期为“在浏览器关闭”…
推荐文章
- 原则-如何打印出真正的sql,而不仅仅是准备好的语句?
- 如何从关联PHP数组中获得第一项?
- PHP/MySQL插入一行然后获取id
- 我如何排序一个多维数组在PHP
- 如何在PHP中截断字符串最接近于一定数量的字符?
- PHP错误:“zip扩展名和unzip命令都没有,跳过。”
- Nginx提供下载。php文件,而不是执行它们
- Json_encode()转义正斜杠
- 如何在PHP中捕获cURL错误
- 如何要求一个分叉与作曲家?
- 如何在php中创建可选参数?
- 在文本文件中创建或写入/追加
- 为什么PHP的json_encode函数转换UTF-8字符串为十六进制实体?
- 如何从一个查询插入多行使用雄辩/流利
- 在PHP单元测试执行期间,如何在CLI中输出?