Cookie、localStorage 和 sessionStorage 的区别及应用实例

在前端开发中,持久化数据存储是一个非常常见的需求。为了实现这一点,浏览器提供了多种方式,包括 Cookie、localStorage 和 sessionStorage。这三者各有优劣,适用于不同的场景

Cookie 是浏览器存储少量数据的一种机制,通常由服务器生成并发送到客户端。每次客户端向同一域名发起请求时,Cookie 都会自动附带在请求头中发送到服务器。

如图所示:

特点:

  • 数据大小限制:单个 Cookie 的数据大小限制通常在 4KB 左右。
  • 生命周期 :Cookie 可以设置 expiresmax-age 属性来控制其有效期,默认情况下,Cookie 会在会话结束(即浏览器关闭)后删除。
  • 作用域 :Cookie 与特定的域名和路径关联,可以通过设置 domainpath 来控制它的作用范围。
  • 安全性 :可以通过 Secure 标记仅允许在 HTTPS 连接中传输 Cookie,还可以通过 HttpOnly 标记使 Cookie 无法被 JavaScript 访问,增加安全性。

应用场景:

  • 会话管理:例如,登录状态的保持。
  • 用户偏好:例如,保存用户的语言设置。
  • 跟踪用户行为:例如,第三方分析工具使用 Cookie 进行用户跟踪。

示例:

复制代码
// 设置一个 Cookie
document.cookie = "username=John; expires=Fri, 31 Dec 2024 23:59:59 GMT; path=/";

// 读取 Cookie
const cookies = document.cookie.split("; ");
cookies.forEach(cookie => {
    const [key, value] = cookie.split("=");
    console.log(`${key}: ${value}`);
});

// 删除 Cookie
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";

2. localStorage

localStorage 是 HTML5 引入的一种 Web 存储机制,用于持久化保存客户端数据。它的存储是基于键值对的,并且不同域名的 localStorage 是独立的。

特点:

  • 数据大小限制:通常为 5MB。
  • 生命周期:localStorage 中的数据没有过期时间,除非手动删除,否则数据会一直存在。
  • 作用域:localStorage 只能在同一域名下的所有页面共享。

应用场景:

  • 长期保存的数据:例如,用户的设置、主题选择等不需要频繁更改的数据。
  • 离线 Web 应用:可以用于保存用户在离线时生成的数据。

示例:

复制代码
// 设置数据
localStorage.setItem('theme', 'dark');

// 读取数据
const theme = localStorage.getItem('theme');
console.log(theme); // 输出 'dark'

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

// 清空所有数据
localStorage.clear();

3. sessionStorage

sessionStorage 也是 HTML5 引入的 Web 存储机制,与 localStorage 类似,但它的生命周期仅限于浏览器会话期间。关闭浏览器标签页或窗口后,sessionStorage 中的数据就会被清除。

特点:

  • 数据大小限制:通常为 5MB。
  • 生命周期:数据在页面会话期间有效,页面关闭后数据即被删除。
  • 作用域:sessionStorage 只能在同一窗口或标签页中共享,不同的窗口或标签页之间的数据互不影响。

应用场景:

  • 临时保存的数据:例如,表单数据的临时保存,以防止页面刷新导致的数据丢失。
  • 页面间的数据传递:例如,在多步表单中,传递各步之间的数据。

示例:

复制代码
// 设置数据
sessionStorage.setItem('sessionData', 'temporaryData');

// 读取数据
const data = sessionStorage.getItem('sessionData');
console.log(data); // 输出 'temporaryData'

// 删除数据
sessionStorage.removeItem('sessionData');

// 清空所有数据
sessionStorage.clear();

4. 区别总结:

特性 Cookie localStorage sessionStorage
数据大小限制 约 4KB 约 5MB 约 5MB
生命周期 可设置过期时间 持久保存,除非手动删除 仅在页面会话期间有效
作用域 与域名、路径相关联 同一域名下的所有页面共享 仅在同一窗口或标签页中共享
是否随请求发送 每次请求都会自动附带发送
常见应用场景 会话管理、用户偏好、跟踪用户 长期保存的数据、离线 Web 应用 临时保存的数据、页面间数据传递

PS:图片来源于B站技术蛋老师,侵删

相关推荐
Wect1 天前
浏览器缓存机制
前端·面试·浏览器
FliPPeDround5 天前
浏览器扩展 E2E 测试的救星:vitest-environment-web-ext 让你告别繁琐配置
e2e·浏览器·测试
SuperEugene5 天前
浏览器存储:localStorage / sessionStorage / cookie 应该怎么用
前端·javascript·面试·浏览器
宁雨桥5 天前
浏览器渲染原理
前端·浏览器·原理
YZ0997 天前
2026年如何批量保存小红书作者主页的视频、图片和文案?
经验分享·浏览器·插件
程序员ys7 天前
网页白屏的原理与优化
前端·性能优化·浏览器
Wect9 天前
从输入URL到页面显示的完整技术流程
前端·面试·浏览器
NEXT069 天前
从输入 URL 到页面展示的完整链路解析
网络协议·面试·浏览器
CappuccinoRose12 天前
CSS 语法学习文档(十五)
前端·学习·重构·渲染·浏览器
REDcker13 天前
Media Source Extensions (MSE) 详解
前端·网络·chrome·浏览器·web·js