查看关于设置cookie的php文档,我看到我可以为cookie设置过期日期。您可以将cookie设置为在浏览器会话结束时过期,或者在将来的某个时间过期,但我不知道如何将cookie设置为永不过期。这可能吗?这是如何实现的?
当前回答
如果你想在客户端机器上永久保存数据——或者至少直到浏览器缓存完全清空,使用Javascript本地存储:
https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorage
不要使用会话存储,因为它会像最大年龄为0的cookie一样被清除。
其他回答
根据cookie规范,所有cookie都会过期,因此这不是PHP的限制。
使用一个遥远的未来日期。例如,设置一个十年过期的cookie:
setcookie(
"CookieName",
"CookieValue",
time() + (10 * 365 * 24 * 60 * 60)
);
注意,如果您在32位PHP中设置了超过2038的日期,则该数字将被换行,您将得到一个立即过期的cookie。
你可以设置一个远离日期的日期,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});
我相信没有一种方法可以让饼干永远存在,但你只需要设置它在遥远的未来过期,比如2100年。
我不确定,但cookie不是在浏览器关闭时删除的吗?我以某种方式做了一个永不过期的cookie和chrome识别过期日期为“在浏览器关闭”…
最大值: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
推荐文章
- PHP子字符串提取。获取第一个'/'之前的字符串或整个字符串
- __construct函数的作用是什么?
- PHP中的异步shell执行器
- 如何唯一地识别访问我网站的计算机?
- Laravel 5 -如何访问在视图存储上传的图像?
- 为什么在PHP中使用sprintf函数?
- “质量分配”在Laravel中是什么意思?
- 在逗号上爆炸字符串,并修剪每个值的潜在空格
- 正确的方式删除cookies服务器端
- PHP与MySQL 8.0+错误:服务器请求身份验证方法未知的客户端
- laravel5“LIKE”对等物(雄辩的)
- 在函数中使用默认实参
- 转换php数组到Javascript
- PHP PDO:字符集,集名称?
- PHP函数生成slug (URL字符串)