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

1. Cookie

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站技术蛋老师,侵删

Cookie、localStorage 和 sessionStorage 的区别及应用实例的更多相关文章

  1. cookie,localStorage和sessionStorage的区别

    cookie已经很久没有用过了,一直觉得session Storage和local Storage更加好用一些.

  2. cookie、session、localStorage、sessionStorage的区别

    cookie的机制 cookie是存储在用户本地终端上的数据.有时也用cookies,指某些网站为了辨别用户身份,进行session跟踪而存储在本地终端上的数据,通常经过加密. Cookie是服务器发 ...

  3. Cookie, LocalStorage 与 SessionStorage

    Cookie, LocalStorage 与 SessionStorage相同点 都是储存在用户本地的数据. 意义在于避免数据在浏览器和服务器间不必要地来回传递. 三者的特点     同属于html5 ...

  4. localStorage和sessionStorage的区别

    //在chrome测试的结果; 知识点1:localStorage和sessionStorage的区别; localStorage生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除local ...

  5. 区分 Cookie, LocalStorage 与 SessionStorage

    基本概念 Cookie Cookie 的大小限制为4KB左右,是网景公司的前雇员 Lou Montulli 在1993年3月的发明.它的主要用途有保存登录信息,比如你登录某个网站市场可以看到“记住密码 ...

  6. vuex知识笔记,及与localStorage和sessionStorage的区别

    菜单快捷导航 Vuex是什么东东,有什么应用场景?localStorage和sessionStorage能否替代它? Vuex知识点State.Getter.Mutaion.Action Vuex模块 ...

  7. cookie、LocalStorage、sessionStorage三者区别以及使用方式

    cookie用来保存客户浏览器请求服务器页面的请求信息 HTML5的WebStorage提供了两种API:localStorage(本地存储)和sessionStorage(会话存储) WebStor ...

  8. cookie、localStorage、sessionStorage的区别

    localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 共同点:sessionStorage.localStorage和cooki ...

  9. Cookie、LocalStorage 与 SessionStorage的区别在哪里?

    基本概念 Cookie Cookie 是小甜饼的意思.顾名思义,cookie 确实非常小,它的大小限制为4KB左右.它的主要用途有保存登录信息,比如你登录某个网站市场可以看到“记住密码”,这通常就是通 ...

  10. cookie,localStorage和sessionStorage区别

    三者的异同 特性 Cookie localStorage sessionStorage 数据的生命期 一般由服务器生成,可设置失效时间.如果在浏览器端生成Cookie,默认是关闭浏览器后失效 除非被清 ...

随机推荐

  1. 李沐多模态串讲视频总结 ALBEF VLMo BLIP CoCa BEITv3 模型简要介绍

    开场 多模态串讲的上篇是比较传统的多模态任务 多模态最后的模态交互很重要 传统的缺点是都用了预训练的目标检测器,训练和部署都很困难. ViLT 把预训练的目标检测器换成了一层的 Patch Embed ...

  2. Hugging Face Accelerate 两个后端的故事:FSDP 与 DeepSpeed

    社区中有两个流行的 零冗余优化器(Zero Redundancy Optimizer,ZeRO) 算法实现,一个来自 DeepSpeed,另一个来自 PyTorch.Hugging Face Acce ...

  3. Android Framework:如何让 App 拿到Power key 值

    Android app:如何让 App 拿到Power key 值 原文(有删改):https://blog.csdn.net/qq_37858386/article/details/10383566 ...

  4. 如何在Android 确定 lunch对应的内核配置

    如何在Android 确定 lunch对应的内核配置 背景 因为在调试中发现,user版本出现了一个userdebug版本上没有的bug.为了对比安卓 user版本与userdebug版本的差异,涉及 ...

  5. 嵌入式必读!瑞芯微RK3568J/RK3568B2开发板规格书

    评估板简介 创龙科技TL3568-EVM是一款基于瑞芯微RK3568J/RK3568B2处理器设计的四核ARM Cortex-A55国产工业评估板,每核主频高达1.8GHz/2.0GHz,由核心板和评 ...

  6. 我对《RAG/大模型/非结构化数据知识库类产品》技术架构的思考、杂谈

    1.前言 在6.28/29的稀土掘金开发者大会RAG专场上,我们公司CEO员外代表TorchV分享了我们在<RAG在企业应用中落地的难点与创新> 其中最后分享了两个观点: AI在应用场景落 ...

  7. CF1860C 题解

    显然是一个博弈论题,考虑 dp. 定义状态 \(dp_i\) 表示先手走到 \(i\) 之后是否有必胜策略,不难发现以下几点: 若走到 \(i\) 之后无路可走,那么就必败. 若走到 \(i\) 之后 ...

  8. redis基本数据结构-有序集合

    redis基本数据结构-有序集合zset 特性 使用哈希表+跳表数据结构存储 每个元素由 分数和字段名 两部分组成 增加元素 zadd key score1 member1 [score2 membe ...

  9. [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)

    ​ 牛说(cowsay) 回忆上次内容 上次我们研究了shell脚本的编程 并且在shell中实现了 循环语句 延迟命令 清屏命令 python命令 figlet命令 ​ 编辑 还能整点什么呢? 还想 ...

  10. oeasy教您玩转vim - 76 - # Session会话

    ​ 会话session 回忆组合键映射的细节 上次我们定义了一系列的复合键 主要是和ctrl键一起 快速跳转window窗口 map <c-j> <c-w>j map < ...