document cookie
# expires
1、expires的含义
expires 定义了一个Cookie什么时候过期失效。
expires 属性名大小写不敏感,任何字母大写或者小写都有效。
expires 的值按照标准中的说明是区分大小写的,但是目前的主流浏览器均不区分大小写。
举例: 11 Nov 2022 06:05:33 GMT
expires 的格式和Javascript的 Date.prototype.toUTCString() 函数返回的值格式一致,是UTC+0(经度0度位置)的时间。
格式如下:
Www, dd Mmm yyyy hh:mm:ss GMT
![](https://img2023.cnblogs.com/blog/912275/202303/912275-20230306114650061-1004436073.png)
expires 值应该使用 GMT 格式的时间
var the_date = new Date("December 31, 2020");
var expiresDate = the_date.toGMTString(); //转换成 GMT 格式。编者者: GMT 即格林威治标准时间,现在也称 UTC 即全球标准时间。
在 JS(JavaScript) 中使用 expires 时应该和 cookie 同时写入,如:
document.cookie = "clr=red; expires=" + expiresDate;
而如下写法是不正确的:
document.cookie = "clr=red";
document.cookie = "expires=" + expiresDate;
这样写会形成两个 cookie,第二个 cookie 的名称是 expires,两个 cookie 均没有指定失效日期。
expires 不可读
这就是为什么,我们在 ASP 中使用 response.Write request.cookies("cname").expires 会出错,同样在 JS(JavaScript) 中使用 document.cookie 也不会显示出 expires。
3、expires的有效范围
Chrome 104版本里,cookie expires 最大不超过400天:
https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis
Safari更严格,根据Safari的ITP2.1(intelligent-tracking-prevention)的规则,通过Javascript的设置的Cookie其最长有效期是七天,如果你设置的时间超过七天,它将自动调整到七天。
不过通过Http的设置的Cookie没有此限制,只要年份不超过9999年,都是可以的。这里说的Http是指浏览器地址栏的URL请求,这种Cookie叫做第一方Cookie。如果是第三方Cookie,则会有种种限制。
4、expires的默认值
如果不设置expires,且也没有设置max-age,Cookie会被认为是Session Cookie,所谓Session就是一次会话,浏览器关闭后该Cookie便会失效,下次打开浏览器后不会再有该Cookie。
5、expires用于删除Cookie
指定一个比当前时间早的时间就可以删除目标Cookie。一定记得加上和目标Cookie相同的 domain 和 path 属 性。
这里放出Javascript的示例:
document.cookie = 'xyz=aaa; domain=itthink.tech; path=/; expires=' + new Date(Date.now() - 1).toUTCString();
# max-age
1、含义
max-age 定义了一个Cookie在浏览器端保存的秒数,注意是秒,不是毫秒。
该属性名不区分大小写。
和 expires 不同的是, max-age 定义了一个时间段,而 expires 定义的是一个时间点。
如果 max-age 和 expires 同时出现, max-age 的优先级高于 expires , max-age 的值会被浏览器采纳, expires 的值被丢弃。
例如,如果希望Cookie保存一年,可以这样设置: max-age=31536000 , 31536000 是一年的秒数。
2、格式
max-age 的值必须是一个整数,当是负数或者0时代表删除目标Cookie
3、兼容性问题
IE6、IE7、IE8都不支持 max-age ,所以如果产品的用户群中有这些浏览器的用户,则要考虑是否使用该属性, 毕竟 expires 可以达到一样的效果。
expires 的缺点是,它依赖用户端的时间,如果用户端的时间非常不准确的话,可能会导致和我们的预期不一 致。
4、用max-age删除Cookie
当设置成负数或者0时,可以立即删除目标Cookie。
参考:
https://www.itpow.com/c/824.asp
https://www.itthink.tech/article/b50332d5-6b2e-403d-aa77-fbd6024aad47/254fec46-ceab-4f36-8ee7-6fd678f31ce1