网络数据持久性(Cookie、会话、令牌、LocalStorage和SessionStorage)
内容提要
本文探讨了网络数据持久性的两个方面。首先,我们将介绍如何使用会话或令牌在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攻击,因此不建议存储敏感数据。