查看PHP设置Cookie的文档,我发现可以设置Cookie的过期时间。你可以将Cookie设置为在浏览器会话结束时或在未来的某个时间过期,但我没有找到一种方法可以将Cookie设置为永不过期。这是否可能,并且如何实现?
查看PHP设置Cookie的文档,我发现可以设置Cookie的过期时间。你可以将Cookie设置为在浏览器会话结束时或在未来的某个时间过期,但我没有找到一种方法可以将Cookie设置为永不过期。这是否可能,并且如何实现?
setcookie(
"CookieName",
"CookieValue",
time() + (10 * 365 * 24 * 60 * 60)
);
最大值: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.
如果缓存接收到一个大于它能表示的最大正整数的值,或者任何一个年龄计算溢出,它必须传输一个Age头,其值为2147483648(2^31)。
设置远期绝对时间:
setcookie("CookieName", "CookieValue", 2147483647);
如推荐答案所建议的那样,最好使用绝对时间而不是相对于现在计算。
与32位系统兼容的最大值为:
2147483647 = 2^31 = ~year 2038
由于我的特权,我不能在第一篇帖子中发表评论,因此只能在此处发表。
在设置比当前日期提前20年建议的正确答案时,应考虑到2038年Unix问题。
如果您使用的浏览器或版本存在问题,则在2018年1月19日的cookie加上(20年)的时间可能会遇到2038问题。
你能不能说一个无限循环,cookie的过期时间设置为当前日期+1,这样它永远不会到达应该过期的日期,因为它总是明天?虽然有点过度设计,但只是这样说而已。
虽然完全不可能,但你可以采用类似Google的方法,将cookie设置为在2038年1月17日或其他同样遥远的日期过期。
实际上,你最好将cookie设置为10年或60*60*24*365*10秒,这样它可以存活在大多数计算机上。
从人生的不可预测性出发,我避免使用“永远”和“从不”这两个词。
使用有符号的32位整数可以存储自1970年1月1日以来的最新时间是2038年1月19日星期二03:14:07
(即距离1970年1月1日
231-1=2,147,483,647秒)。这个限制被称为2038年问题。
setCookie("name", "value", strtotime("2038-01-19 03:14:07"));
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});
$cookie->setMaxAge(2147483647);
,该值晚于2080年,并且在32位和64位上均可使用,具体请参考 https://github.com/delight-im/PHP-Cookie - caw