Cookie、sessionStorage 和 localStorage 的区别
网站有时会把信息保存在浏览器中。
保持登录状态。 记住显示设置。 保留购物车内容。 接续上一次操作。 识别来自同一浏览器的再次访问。
用于这些目的的代表性机制,就是 Cookie、sessionStorage、localStorage。
它们让 Web 更方便。 但是从匿名性的角度看,它们会成为识别同一浏览器的线索。
什么是 Cookie
Cookie 是网站保存在浏览器中,并在符合条件的请求中发送给服务器的小型数据。
它会用于登录状态、会话 ID、显示设置、访问分析、广告识别等。
例如,登录某个网站后,浏览器会保存表示会话的 Cookie。 下次访问同一网站时,这个 Cookie 会被发送出去。 网站侧就能判断“这个浏览器是已登录用户”。
匿名性中重要的是,即使改变 IP 地址,Cookie 仍会留下。
用家中线路访问后,再使用 通过同一个浏览器访问,如果发送的是同一个 Cookie,仍会被当作同一个浏览器。
什么是 sessionStorage
sessionStorage 是按浏览器标签页或窗口临时保存的数据。
一般来说,关闭该标签页后就会消失。 它会用于表单的中途输入、画面状态、一时性的操作信息等。
与 Cookie 不同,它通常不会在每个 HTTP 请求中自动发送。 它由 JavaScript 读取和写入,并用于页面内处理。
但是,不能因为它不会发送给服务器,就认为它与匿名性无关。 网页脚本可以读取它,并在需要时发送给服务器。
什么是 localStorage
localStorage 是长期保存在浏览器中的数据。
关闭标签页后仍会留下。 重启浏览器后仍会留下。 有时会用于网站设置、主题、状态保存、识别符等。
它能保存比 Cookie 更大的数据,并由 JavaScript 处理。
在匿名性中,需要注意 localStorage 中留下的值会被用于识别再次访问。
即使删除 Cookie,如果识别符仍留在 localStorage 中,也可能被当作同一个浏览器。
三者的区别
Cookie、sessionStorage、localStorage 的保存期间和发送方式不同。
| 项目 | Cookie | sessionStorage | localStorage |
|---|---|---|---|
| 保存期间 | 保留到设定的期限 | 直到关闭标签页或窗口 | 原则上没有期限,但可能因用户操作、浏览器设置、隐私浏览、存储区域处理方式而消失 |
| 发送给服务器 | 符合条件时自动发送 | 不会自动发送 | 不会自动发送 |
| 主要用途 | 登录、会话、分析 | 临时画面状态 | 设置、状态保存、识别符 |
| 匿名性上的注意 | 即使 IP 改变,也能知道同一浏览器 | 会在页面处理中使用 | 删除 Cookie 后也可能留下 |
它们都是留在浏览器中的信息。 在匿名性中,只看 Cookie 是不够的。
匿名性中会成为问题的场景
会成为问题的是,实名使用和匿名使用混在同一个浏览器中的场景。
例如,把登录过实名账号的浏览器直接用于匿名活动。 只删除 Cookie,而 localStorage 仍然留下。 打开匿名用网站后,又在同一个标签页或同一个浏览器中回到实名服务。
在这样的运营中,浏览器内的信息会混在一起。
| 场景 | 会发生什么 |
|---|---|
| 用同一个浏览器进行实名和匿名使用 | Cookie 和保存信息会混在一起 |
| 只删除 Cookie | localStorage 等仍会留下 |
| 在已登录网站打开的状态下进行匿名活动 | 行为会在同一环境中连接起来 |
| 用同一个浏览器使用多个账号 | 容易发生账号关联 |
在匿名性中,重要的不只是删除保存数据,也要分开环境。
Cookie、sessionStorage、localStorage 有时会被统一作为“站点数据”处理。 但是,它们的保存方式和消失方式并不相同。
即使按下浏览器的“删除历史记录”,根据选择的项目,有时只会删除 Cookie、缓存或浏览历史,站点数据的一部分会留下。 反过来,如果统一删除站点数据,登录状态和设置也会消失。
| 操作 | 注意点 |
|---|---|
| 只删除浏览历史 | Cookie 和 localStorage 可能留下 |
| 删除 Cookie | localStorage 等其他存储区域可能留下 |
| 删除站点数据 | 登录状态和设置也会消失 |
| 隐私窗口 | 与现有普通浏览器环境的行为不同 |
| 浏览器同步 | 信息可能从其他设备恢复 |
在匿名性中,为了避免“以为已经删除”,需要确认删除范围。
分离比删除更重要
Cookie 和 localStorage 可以删除。 但是,每次都持续完美删除很困难。
每个网站的保存位置不同。 浏览器设置中会删除的范围不同。 扩展功能和同步功能会产生影响。 登录的瞬间会创建新的识别符。
因此,在匿名性中,不只依赖删除,而是分开实名用和匿名用浏览器更现实。
在高风险活动中,要考虑不仅分开浏览器,也分开设备、OS、网络环境。
隐私浏览有时也可以作为分离的一部分发挥作用。 但是,隐私窗口不是匿名化技术。 它不是能对网站、通信运营商、职场或学校网络、连接目标服务器完全隐藏自己的机制。
隐私窗口主要是让历史记录和 Cookie 更不容易留在设备内的功能。 如果登录实名账号,该行为就会与账号连接起来。
要确认的事
关于浏览器内的保存信息,要确认以下几点。
- 实名用和匿名用是否没有使用同一个浏览器
- 是否没有在匿名用浏览器中登录实名账号
- 是否不仅确认 Cookie,也确认了整个站点数据
- 是否以 localStorage 和 sessionStorage 可能留下为前提思考
- 浏览器同步是否没有把信息与其他设备混在一起
- 扩展功能是否没有持有保存信息
尤其需要注意浏览器同步。 如果实名环境的书签、历史记录、扩展功能、已保存密码进入匿名环境,分离就会崩坏。
总结
Cookie、sessionStorage、localStorage 是网站在浏览器内保存信息的机制。
Cookie 在符合条件时会自动发送给服务器。 sessionStorage 用于标签页单位的临时保存。 localStorage 是长期保留的存储区域。
它们让 Web 更方便,但在匿名性中,会成为识别同一浏览器的线索。
即使改变 IP 地址,只要 Cookie 或 localStorage 仍然留下,也可能被当作同一个浏览器。
为了保护匿名性,重要的不只是删除保存信息,也要分开实名用和匿名用浏览器环境。
相关工具
BrowserLeaks WebRTC
与本文相关的外部资源。只有在符合你的处境和威胁模型时再打开。
列在这里的原因: 它可能有助于理解本文主题,但位于 Anonymity Sense 之外,使用前应先自行确认。
BrowserLeaks Fingerprint
与本文相关的外部资源。只有在符合你的处境和威胁模型时再打开。
列在这里的原因: 它可能有助于理解本文主题,但位于 Anonymity Sense 之外,使用前应先自行确认。
EFF Cover Your Tracks
与本文相关的外部资源。只有在符合你的处境和威胁模型时再打开。
列在这里的原因: 它可能有助于理解本文主题,但位于 Anonymity Sense 之外,使用前应先自行确认。
Tor Project
与本文相关的外部资源。只有在符合你的处境和威胁模型时再打开。
列在这里的原因: 它可能有助于理解本文主题,但位于 Anonymity Sense 之外,使用前应先自行确认。