Cookie、LocalStorage 与 SessionStorage:前端存储三剑客

385 阅读2分钟

在 Web 开发中,我们经常需要在客户端存储一些数据,例如用户偏好、登录状态、购物车信息等。为了实现这一目标,浏览器提供了三种主要的存储机制:Cookie、LocalStorage 和 SessionStorage。它们各有优缺点,适用于不同的场景。

一、特性对比

特性CookieLocalStorageSessionStorage
生命周期可设置过期时间,未设置则浏览器关闭后失效永久存储,除非手动删除页面会话结束时失效(关闭浏览器或标签页)
存储大小4KB 左右5MB 左右5MB 左右
与服务端通信每次都会携带在 HTTP 头中不参与不参与
可访问性所有同源窗口所有同源窗口当前页面窗口

二、应用场景

1. Cookie

  • 用户身份验证:  存储用户登录凭证(例如 token),实现自动登录。
  • 个性化设置:  存储用户语言偏好、主题设置等。
  • 追踪用户行为:  记录用户浏览历史、点击流等,用于数据分析。

2. LocalStorage

  • 持久化数据存储:  存储用户偏好设置、购物车信息等需要长期保存的数据。
  • 离线应用:  存储离线应用所需的资源文件和数据。
  • 缓存数据:  缓存 API 响应数据,提升页面加载速度。

3. SessionStorage

  • 页面间数据传递:  在同一网站的多个页面间传递数据,例如表单数据、分页信息等。
  • 临时数据存储:  存储当前页面会话中需要临时保存的数据,例如编辑中的内容。

三、代码示例

1. Cookie

javascript

Copy

// 设置 cookie
document.cookie = "username=John Doe; expires=Thu, 18 Dec 2023 12:00:00 UTC; path=/";

// 读取 cookie
const username = document.cookie.split('; ').find(row => row.startsWith('username')).split('=')[1];

2. LocalStorage

javascript

Copy

// 设置 localStorage
localStorage.setItem('theme', 'dark');

// 读取 localStorage
const theme = localStorage.getItem('theme');

// 删除 localStorage
localStorage.removeItem('theme');

3. SessionStorage

javascript

Copy

// 设置 sessionStorage
sessionStorage.setItem('cart', JSON.stringify(['apple', 'banana']));

// 读取 sessionStorage
const cart = JSON.parse(sessionStorage.getItem('cart'));

// 删除 sessionStorage
sessionStorage.removeItem('cart');

四、总结

  • Cookie 适合存储小量且需要与服务器通信的数据。
  • LocalStorage 适合存储大量且需要持久化的数据。
  • SessionStorage 适合存储临时数据,页面会话结束后自动清除。

选择合适的存储机制可以有效提升 Web 应用的性能和用户体验。