Cookie 的工作原理 - 赋予 Web「记忆」的技术
HTTP 本质上是一种无状态协议。服务器每次收到请求时,都无法知道这是来自谁的第几次访问。1994 年,Netscape 公司的工程师 Lou Montulli 为了解决这个问题而发明了 Cookie。
Cookie 是服务器通过 Set-Cookie 头部发送给浏览器的小型文本数据,浏览器在后续请求中会自动将该数据作为 Cookie 头部附加发送。这使得登录状态保持、购物车保存、语言设置记忆等「状态保持」成为可能。
Cookie 虽然是一项便利的技术,但也被广泛用作追踪手段,从隐私角度来看已成为全球监管的对象。
第一方 Cookie 与第三方 Cookie
Cookie 根据发行方的域名分为两类。这一区分正是隐私问题的核心所在。
| 类型 | 发行方 | 主要用途 | 隐私风险 |
|---|---|---|---|
| 第一方 | 正在访问的网站本身 | 登录保持、购物车保存、设置记忆 | 低(仅在该网站内有效) |
| 第三方 | 与正在访问的网站不同的域名 | 广告追踪、数据分析、社交媒体组件 | 高(跨多个网站追踪行为) |
例如,当你访问 shop.example.com 时,该网站设置的 Cookie 是第一方 Cookie。而页面中嵌入的广告网络 ads.tracker.com 设置的 Cookie 则是第三方 Cookie。由于广告网络向数百万个网站分发脚本,因此能够跨站追踪用户访问了哪些网站以及访问顺序。
Safari 自 2017 年推出 ITP(Intelligent Tracking Prevention)以来,默认屏蔽第三方 Cookie。Firefox 也通过 ETP(Enhanced Tracking Protection)实施了类似的对策。Chrome 长期以来一直预告将废除第三方 Cookie,但在 2024 年转变了方针,改为将选择权交给用户。
会话 Cookie 与持久 Cookie
Cookie 还可以按有效期进行分类。
会话 Cookie
未设置 Expires 或 Max-Age 属性的 Cookie。关闭浏览器时会自动删除。用于登录会话管理和临时表单数据保持。从安全角度来看,比持久 Cookie 更安全,因为关闭浏览器后 Cookie 就会消失,降低了在共享电脑上的风险。
持久 Cookie
设置了 Expires(有效期日期时间)或 Max-Age(有效期秒数)的 Cookie。即使关闭浏览器,也会保留到指定的期限。「保持登录状态」复选框的背后,就是用长期有效的持久 Cookie 替代了会话 Cookie。
持久 Cookie 的有效期在 Chrome 中被限制为最长 400 天(2023 年以后)。在此之前可以设置数年后的日期,但为了抑制长期追踪而设定了上限。
SameSite 属性 - CSRF 防护的关键
SameSite 属性是控制 Cookie 是否在跨站请求中发送的机制。作为 CSRF(Cross-Site Request Forgery)攻击的对策于 2016 年引入,目前所有主流浏览器都已支持。
| 值 | 行为 | 用途 |
|---|---|---|
Strict |
仅在同站请求中发送 Cookie | 银行网站等需要高安全性的场景 |
Lax |
顶级导航(链接点击)时发送,POST 或 iframe 中不发送 | 一般网站(Chrome 的默认值) |
None |
在所有跨站请求中发送 Cookie | 第三方 Cookie(必须配合 Secure 属性) |
自 2020 年起,Chrome 将未指定 SameSite 属性的 Cookie 视为 Lax。这意味着除非明确设置 SameSite=None; Secure,否则 Cookie 不会在跨站请求中发送。这一变更影响了许多 Web 应用程序,特别是使用 iframe 的支付表单和 SSO(单点登录)实现需要进行相应调整。
想要学习包括 Cookie 安全属性在内的 Web 技术基础,可以参考Web 技术入门书籍。
GDPR 与 Cookie 同意 - 为什么会出现同意横幅
欧盟的 GDPR(通用数据保护条例,2018 年生效)和 ePrivacy 指令规定,对欧盟境内用户使用 Cookie 时,必须事先获得明确同意。这就是每次访问网站时出现的 Cookie 同意横幅的由来。
GDPR 对同意的要求非常严格:
- 事先同意(Opt-in):非必要 Cookie 在用户同意之前不得设置
- 明确的选择:必须以与「全部接受」同等醒目的方式提供「全部拒绝」按钮
- 细粒度选择:必须能够按 Cookie 类型(分析、广告、功能)分别同意或拒绝
- 撤回的便利性:同意必须能够随时轻松撤回
- 记录保存:有义务保存谁在何时同意了什么的记录
违规的罚款最高可达全球年营业额的 4% 或 2000 万欧元(取较高者)。2022 年,法国数据保护机构 CNIL 以 Cookie 同意不合规为由,对 Google 处以 1.5 亿欧元、对 Facebook 处以 6000 万欧元的罚款。
为什么会出现 Cookie 同意横幅一文中更详细地解释了各国法规的差异。也请一并查看广告追踪防护。
删除 Cookie 会怎样
从浏览器设置中删除 Cookie 会产生以下影响:
- 登录状态被重置:所有网站都会退出登录,需要重新登录
- 购物车内容消失:电商网站购物车中的商品会丢失
- 网站设置被重置:深色模式、语言设置、显示数量等自定义设置恢复为初始状态
- Cookie 同意记录消失:Cookie 同意横幅会再次出现
- 追踪被暂时重置:广告网络的用户画像被切断(但可能通过浏览器指纹重新关联)
与其全部删除 Cookie,不如只屏蔽第三方 Cookie 而保留第一方 Cookie,这是兼顾便利性和隐私的现实做法。Firefox 的「增强型追踪保护」和 Safari 的 ITP 正是采用了这种方式。
在 IP 确认酱可以查看包括浏览器 Cookie 设置状况在内的安全评分。定期检查,确认是否有不必要的 Cookie 积累。