查看关于设置cookie的php文档,我看到我可以为cookie设置过期日期。您可以将cookie设置为在浏览器会话结束时过期,或者在将来的某个时间过期,但我不知道如何将cookie设置为永不过期。这可能吗?这是如何实现的?


我相信没有一种方法可以让饼干永远存在,但你只需要设置它在遥远的未来过期,比如2100年。


你不能这样做,但是如果你将过期时间设置为现在+ 100年呢?


你不应该这样做,这是不可能的,如果你愿意,你可以设置一个更大的值,比如10年以后。

顺便说一句,我从来没有见过有这样要求的饼干:)


根据cookie规范,所有cookie都会过期,因此这不是PHP的限制。

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

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

注意,如果您在32位PHP中设置了超过2038的日期,则该数字将被换行,您将得到一个立即过期的cookie。


虽然这是不可能的,但你可以做一些类似谷歌所做的事情,将你的cookie设置为2038年1月17日或同样遥远的时间。

实际上,你最好将你的cookie设置为10年或60*60*24*365*10年,这应该比你的cookie所使用的大多数机器的寿命都长。


我不确定,但cookie不是在浏览器关闭时删除的吗?我以某种方式做了一个永不过期的cookie和chrome识别过期日期为“在浏览器关闭”…


我的特权阻止我对第一篇文章发表评论,所以它必须在这里。

从当前日期提前20年设置时,应该考虑到2038 unix错误,这是上面建议的正确答案。

你的cookie在2018年1月19日(20年后)可能会遇到2038问题,这取决于你最终运行的浏览器和或版本。


设定遥远未来的绝对时间:

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

使用绝对时间比按照公认答案中建议的相对于当前计算时间要好。

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

2147483647 = 2^31 = ~year 2038

你不能说一个永不结束的循环,cookie过期日期为当前日期+ 1所以它永远不会到达它应该过期的日期,因为它总是明天?有点夸张,但只是说说而已。


如果你想在客户端机器上永久保存数据——或者至少直到浏览器缓存完全清空,使用Javascript本地存储:

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

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


最大值: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


永远和永远是我避免使用的两个词,因为生活的不可预测性。

自1970年1月1日以来,可以使用有符号32位整数存储的最新时间是2038年1月19日星期二的03:14:07(231-1 = 2,147,483,647秒,1970年1月1日之后)。这种限制被称为2038年问题

setCookie("name", "value", strtotime("2038-01-19 03:14:07"));

你可以设置一个远离日期的日期,cookie是这样创建的:

var Cookie_expiry = new Date();
Cookie_expiry.setDate(Cookie_expiry.getDate()+10e5);   
// expiry date of cookie is set to be practically infinite (~ 4000 years)
setCookie('token', 'token_value', {expires: Cookie_expiry});

当链接发布时,Chrome cookie最多可以存活400天。Chrome在这个回应的时候是一个大问题,所以我会让一个cookie的过期是在400天或更少。

如果你不想点击链接,它会总结说:

当cookie设置了显式的Expires/Max-Age属性时,该值将被限制在未来不超过400天。在此之前,没有任何限制,而且饼干在未来可能会过期数千年之久。