本文要点
持久Cookie靠两个属性之一定义到期时间,看开发者工具时也是看这两栏
Cookie保存的内容不只是键值对,还带着一组属性,这些属性决定它能不能被发送、能被谁读到、发到哪些地址
要查看Cookie存储,可以在开发者工具中启用存储查看器(Storage Inspector)功能,并在存储树上选中Cookie

本文目录
两类Cookie的删除时机不同
如果你在开发者工具里看到一串Cookie,想知道哪些会在关闭浏览器后消失、哪些会留下来,判断依据是它的生命周期怎么定义。
按MDN的HTTP Cookie说明,Cookie的生命周期有两种定义方式:
会话期Cookie在当前的会话结束之后删除。这里要注意,浏览器自己定义“当前会话”结束的时间,一些浏览器重启时会使用会话恢复,这可能导致会话Cookie被延长。
持久性Cookie在过期时间(Expires)指定的日期,或有效期(Max-Age)指定的一段时间后被删除。
所以“会话Cookie”和“持久Cookie”的区别不在名字,而在有没有设定过期时间。有Expires或Max-Age的,属于持久性Cookie;没有设的,按会话期处理。
本文只解释Cookie属性,以及如何用开发者工具查看你自己站点上的Cookie。不展示、不复制任何真实Cookie值。下面所有示例都是自建的练习数据。
Expires和Max-Age分别怎么写、怎么读
持久Cookie靠两个属性之一定义到期时间,看开发者工具时也是看这两栏。
Expires写的是一个具体日期时间,例如资料里的写法是:
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;Max-Age写的是从设置时刻起的一段时间。资料没有给出Max-Age的示例写法,所以这里不编造具体数值,只说明它的含义是“有效期指定的一段时间”。
有一个容易忽略的点:资料明确写了,当Cookie的过期时间(Expires)被设定时,设定的日期和时间只与客户端相关,而不是服务端。也就是说,到期判断发生在浏览器这一侧,不是服务器替你计时。
自建示例(不是对某个真实站点的记录):假设你在练习页面里让服务器返回一个带Expires的Set-Cookie,然后在开发者工具里查看这个Cookie的Expires栏,看它显示的是不是你设置的那个时间点。
Secure、HttpOnly、Domain、Path、SameSite各限制什么
Cookie保存的内容不只是键值对,还带着一组属性,这些属性决定它能不能被发送、能被谁读到、发到哪些地址。
Secure:标记为Secure的Cookie只应通过HTTPS加密过的请求发送给服务端,永远不会使用不安全的HTTP发送(本地主机除外)。资料同时提醒,Secure不会阻止对Cookie中敏感信息的访问。
HttpOnly:JavaScript的Document.cookie API无法访问带HttpOnly属性的Cookie,这类Cookie仅作用于服务器。资料举例说,持久化服务器端会话的Cookie不需要对JavaScript可用,应具有HttpOnly属性。
Domain:指定哪些主机可以接受Cookie。不指定时默认只为同一host设置,不包含子域名;指定了Domain,一般包含子域名,限制比省略时更少。
Path:指定一个URL路径,该路径必须存在于请求的URL中才会发送Cookie。资料给的例子是设置Path=/docs,则/docs、/docs/、/docs/Web/、/docs/Web/HTTP都会匹配,而/、/docsets、/fr/docs不会匹配。
SameSite:允许服务器指定是否、何时通过跨站点请求发送Cookie,取值有Strict、Lax、None。资料说明,如果没有设置SameSite属性,Cookie会被视为Lax。
这些属性是你在开发者工具里查看自己站点Cookie时要逐项对照的内容,不是让你去改别人的Cookie。
用开发者工具查看自己站点的Cookie
要查看Cookie存储,可以在开发者工具中启用存储查看器(Storage Inspector)功能,并在存储树上选中Cookie。这是资料给出的查看入口。
查看时建议按属性分栏记录,而不是把整条Cookie抄下来。可以这样组织(以下为编辑整理的记录方法,不是对某个真实站点的实测):
1. 名称栏:只记下Cookie的名字,不记值。
2. 过期时间栏:看是具体日期,还是“会话”之类的标记。这一栏直接对应会话Cookie与持久Cookie的区分。
3. Domain和Path栏:看这条Cookie被限定在哪个主机、哪个路径下。
4. Secure、HttpOnly、SameSite栏:看这三项有没有被勾选或标出。
自建练习建议:在你自己的练习站点上设置一条测试Cookie,然后在存储查看器里逐栏核对上面四项。练习用的名字和值自己编,例如练习名用 test_cookie,值用练习字符串,不要用任何真实站点的Cookie值。
会话Cookie不一定在关浏览器时消失
这是初学者最容易记错的一点,值得单独说。
资料的原话是:会话期Cookie会在当前的会话结束之后删除。浏览器定义了“当前会话”结束的时间,一些浏览器重启时会使用会话恢复。这可能导致会话Cookie无限延长。
所以“关掉浏览器,会话Cookie就没了”这句话并不总是成立。会话结束的判定权在浏览器手里,而浏览器可能通过会话恢复把上次的会话接着用。
对查看自己站点Cookie的人来说,这意味着:在存储查看器里看到一条Cookie没有过期时间,只能说明它被当作会话期Cookie处理,不能据此断定它一定会在你下次关闭浏览器时消失。
要确认一条Cookie的实际行为,看的是它的属性栏,而不是凭“会话”两个字下结论。
Cookie的值可以被读取和修改
查看自己站点Cookie时,还要记住一条边界:Cookie里存的内容不是安全的保险箱。
资料在安全部分写明:当你存储信息到Cookie中时,需要明白Cookie的值是可以被访问、且可以被终端用户所修改的。资料还提醒,当机器处于不安全环境时,切记不能通过HTTP Cookie存储、传输敏感信息。
这条对“Cookie保存了什么”这个问题很关键:Cookie保存的是服务器发来、浏览器存下、下次请求再带回的一小块数据,它本身不保证机密性,也不保证完整性。
所以查看自己站点Cookie时,看到值里出现了不该出现的内容,比如明文口令或身份令牌,应该把它当成一个需要处理的问题,而不是一条正常记录。资料给出的缓解方向包括:用HttpOnly防止JavaScript访问Cookie值;用于敏感信息的Cookie生存期应较短,并把SameSite设为Strict或Lax。
本文的适用限制
本文只解释Cookie的生命周期、常见属性,以及如何用开发者工具查看你自己站点上的Cookie。
不涉及:展示或复制任何真实Cookie值;修改他人站点的Cookie;服务端具体框架的设置代码;GDPR、电子隐私权指令、加州消费者隐私法等法规的合规操作。资料提到这些法规存在,但本文不展开其具体要求。
资料没有给出的内容,本文不补。例如Max-Age的具体示例写法、各类浏览器的兼容性细节、Cookie数量或大小上限,资料均未提供,因此本文不写这些数值。
如果你要动手练习,建议只在自己搭建的练习站点或本地练习页面上操作,不要拿正在使用的真实站点直接试。
观看知识要点视频 18 秒
18秒无旁白要点导览,文字来自已审核正文;完整步骤、条件及参考资料见下方。
参考资料
以下原始资料提供本文依据;请结合日期、适用条件和产品说明查阅。
请结合原始资料的适用条件阅读。
返回浏览器工具 →