跳到正文
效率工具实用笔记关于本站
浏览器工具

Cookie保存了什么:会话Cookie与持久Cookie的区别与查看方法

约 8 分钟阅读AI 辅助整理

会话Cookie在会话结束后删除,持久Cookie在Expires或Max-Age到期后删除。本文用自建示例说明两类Cookie的生命周期差异,并介绍如何用开发者工具查看自己站点Cookie的属性,不展示真实Cookie值。

本文要点

  1. 持久Cookie靠两个属性之一定义到期时间,看开发者工具时也是看这两栏

  2. Cookie保存的内容不只是键值对,还带着一组属性,这些属性决定它能不能被发送、能被谁读到、发到哪些地址

  3. 要查看Cookie存储,可以在开发者工具中启用存储查看器(Storage Inspector)功能,并在存储树上选中Cookie

Cookie保存了什么:会话Cookie与持久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秒无旁白要点导览,文字来自已审核正文;完整步骤、条件及参考资料见下方。

参考资料

以下原始资料提供本文依据;请结合日期、适用条件和产品说明查阅。

请结合原始资料的适用条件阅读。

返回浏览器工具 →