网络数据持久性(Cookie、会话、令牌、LocalStorage和SessionStorage)

💡 原文英文,约1700词,阅读约需6分钟。
📝

内容提要

本文探讨了网络数据持久性的两个方面。首先,我们将介绍如何使用会话或令牌在cookie中存储身份验证信息。接下来,我们将看看如何处理浏览器端的持久性,使用cookie进行标识和localStorage或sessionStorage存储用户偏好。cookie是将信息存储在用户浏览器中的小片段,用于个性化用户体验、记住语言偏好、保持用户会话登录和跟踪广告。cookie可以是会话cookie(关闭浏览器时删除)或持久cookie(保留一段时间)。另外,本文还介绍了localStorage和sessionStorage的用法和区别。

🔎

延伸解读

Cookie 与令牌认证的适用场景

文章指出,基于 Cookie 的会话认证通常只涉及用户和服务器两方,适合传统网站保持登录状态;而令牌(如 JWT、OAuth)更适合涉及多个互不信任方的场景,例如移动应用。两者并非互斥,同一服务的移动端可能用令牌,网站端则用 Cookie,实际开发中常根据客户端类型和信任边界选择或组合使用。

浏览器端三种存储的持久性差异

Cookie、localStorage 和 sessionStorage 都存储在浏览器端,但持久性不同:会话 Cookie 关闭浏览器即删除,持久 Cookie 可保留一段时间;localStorage 数据在浏览器关闭后依然存在,直到手动或代码删除;sessionStorage 仅在当前标签页会话内有效,关闭标签页即清除。选择时需根据数据需要保留多久来决定。

存储容量与安全注意事项

Cookie 容量限制为 4KB,且会随每个 HTTP 请求自动发送,容易暴露于 XSS 攻击,因此不适合存放敏感数据。localStorage 和 sessionStorage 容量通常在 5MB 到 10MB 之间,且不会自动随请求发送,相对更适合存储用户偏好或应用状态。但文章强调,这些数据都能通过浏览器控制台查看和操作,仍不应存储敏感信息。

❓

Q&A

什么是cookie,它的主要用途是什么?

Cookie是存储在用户浏览器中的小片段,主要用于个性化用户体验、记住语言偏好和保持用户会话登录。

会话cookie和持久cookie有什么区别?

会话cookie在关闭浏览器时删除,而持久cookie在定义的时间内保留。

localStorage和sessionStorage有什么不同?

localStorage的数据在浏览器关闭后仍然存在,而sessionStorage的数据在关闭标签页后删除。

如何使用localStorage和sessionStorage存储数据?

可以使用localStorage.setItem('key', 'value')和sessionStorage.setItem('key', 'value')来保存数据。

cookie在状态持久性中是如何工作的?

用户登录后,服务器通过设置cookie来识别用户,后续请求中浏览器会自动发送该cookie以维持会话。

使用cookie存储敏感信息有什么风险?

cookie可能会受到XSS攻击,因此不建议存储敏感数据。

➡️

继续阅读