Cookie、localStorage 和 sessionStorage 的区别及应用实例
在前端开发中,持久化数据存储是一个非常常见的需求。为了实现这一点,浏览器提供了多种方式,包括 Cookie、localStorage 和 sessionStorage。这三者各有优劣,适用于不同的场景
1. Cookie
Cookie 是浏览器存储少量数据的一种机制,通常由服务器生成并发送到客户端。每次客户端向同一域名发起请求时,Cookie 都会自动附带在请求头中发送到服务器。
如图所示:
特点:
- 数据大小限制:单个 Cookie 的数据大小限制通常在 4KB 左右。
- 生命周期:Cookie 可以设置
expires
或max-age
属性来控制其有效期,默认情况下,Cookie 会在会话结束(即浏览器关闭)后删除。 - 作用域:Cookie 与特定的域名和路径关联,可以通过设置
domain
和path
来控制它的作用范围。 - 安全性:可以通过
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 的区别及应用实例的更多相关文章
- cookie,localStorage和sessionStorage的区别
cookie已经很久没有用过了,一直觉得session Storage和local Storage更加好用一些.
- cookie、session、localStorage、sessionStorage的区别
cookie的机制 cookie是存储在用户本地终端上的数据.有时也用cookies,指某些网站为了辨别用户身份,进行session跟踪而存储在本地终端上的数据,通常经过加密. Cookie是服务器发 ...
- Cookie, LocalStorage 与 SessionStorage
Cookie, LocalStorage 与 SessionStorage相同点 都是储存在用户本地的数据. 意义在于避免数据在浏览器和服务器间不必要地来回传递. 三者的特点 同属于html5 ...
- localStorage和sessionStorage的区别
//在chrome测试的结果; 知识点1:localStorage和sessionStorage的区别; localStorage生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除local ...
- 区分 Cookie, LocalStorage 与 SessionStorage
基本概念 Cookie Cookie 的大小限制为4KB左右,是网景公司的前雇员 Lou Montulli 在1993年3月的发明.它的主要用途有保存登录信息,比如你登录某个网站市场可以看到“记住密码 ...
- vuex知识笔记,及与localStorage和sessionStorage的区别
菜单快捷导航 Vuex是什么东东,有什么应用场景?localStorage和sessionStorage能否替代它? Vuex知识点State.Getter.Mutaion.Action Vuex模块 ...
- cookie、LocalStorage、sessionStorage三者区别以及使用方式
cookie用来保存客户浏览器请求服务器页面的请求信息 HTML5的WebStorage提供了两种API:localStorage(本地存储)和sessionStorage(会话存储) WebStor ...
- cookie、localStorage、sessionStorage的区别
localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 共同点:sessionStorage.localStorage和cooki ...
- Cookie、LocalStorage 与 SessionStorage的区别在哪里?
基本概念 Cookie Cookie 是小甜饼的意思.顾名思义,cookie 确实非常小,它的大小限制为4KB左右.它的主要用途有保存登录信息,比如你登录某个网站市场可以看到“记住密码”,这通常就是通 ...
- cookie,localStorage和sessionStorage区别
三者的异同 特性 Cookie localStorage sessionStorage 数据的生命期 一般由服务器生成,可设置失效时间.如果在浏览器端生成Cookie,默认是关闭浏览器后失效 除非被清 ...
随机推荐
- 李沐多模态串讲视频总结 ALBEF VLMo BLIP CoCa BEITv3 模型简要介绍
开场 多模态串讲的上篇是比较传统的多模态任务 多模态最后的模态交互很重要 传统的缺点是都用了预训练的目标检测器,训练和部署都很困难. ViLT 把预训练的目标检测器换成了一层的 Patch Embed ...
- Hugging Face Accelerate 两个后端的故事:FSDP 与 DeepSpeed
社区中有两个流行的 零冗余优化器(Zero Redundancy Optimizer,ZeRO) 算法实现,一个来自 DeepSpeed,另一个来自 PyTorch.Hugging Face Acce ...
- Android Framework:如何让 App 拿到Power key 值
Android app:如何让 App 拿到Power key 值 原文(有删改):https://blog.csdn.net/qq_37858386/article/details/10383566 ...
- 如何在Android 确定 lunch对应的内核配置
如何在Android 确定 lunch对应的内核配置 背景 因为在调试中发现,user版本出现了一个userdebug版本上没有的bug.为了对比安卓 user版本与userdebug版本的差异,涉及 ...
- 嵌入式必读!瑞芯微RK3568J/RK3568B2开发板规格书
评估板简介 创龙科技TL3568-EVM是一款基于瑞芯微RK3568J/RK3568B2处理器设计的四核ARM Cortex-A55国产工业评估板,每核主频高达1.8GHz/2.0GHz,由核心板和评 ...
- 我对《RAG/大模型/非结构化数据知识库类产品》技术架构的思考、杂谈
1.前言 在6.28/29的稀土掘金开发者大会RAG专场上,我们公司CEO员外代表TorchV分享了我们在<RAG在企业应用中落地的难点与创新> 其中最后分享了两个观点: AI在应用场景落 ...
- CF1860C 题解
显然是一个博弈论题,考虑 dp. 定义状态 \(dp_i\) 表示先手走到 \(i\) 之后是否有必胜策略,不难发现以下几点: 若走到 \(i\) 之后无路可走,那么就必败. 若走到 \(i\) 之后 ...
- redis基本数据结构-有序集合
redis基本数据结构-有序集合zset 特性 使用哈希表+跳表数据结构存储 每个元素由 分数和字段名 两部分组成 增加元素 zadd key score1 member1 [score2 membe ...
- [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)
牛说(cowsay) 回忆上次内容 上次我们研究了shell脚本的编程 并且在shell中实现了 循环语句 延迟命令 清屏命令 python命令 figlet命令 编辑 还能整点什么呢? 还想 ...
- oeasy教您玩转vim - 76 - # Session会话
会话session 回忆组合键映射的细节 上次我们定义了一系列的复合键 主要是和ctrl键一起 快速跳转window窗口 map <c-j> <c-w>j map < ...