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

news/2024/11/17 0:49:42/文章来源:https://www.cnblogs.com/zx618/p/18357210

在前端开发中,持久化数据存储是一个非常常见的需求。为了实现这一点,浏览器提供了多种方式,包括 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. 区别总结:

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

 

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/783324.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue脚手架报错error SchoolName is not defined no-undef

将组件命名更改位两个英文单词并采用大驼峰(不过我改后还在运行不了。。。或者在vue.config.js中添加lintOnSave: false,

vue---v-text和v-html绑定数据指令

<p><!-- v-text指令的写法 指令必须写在开始标签上,作为标签的属性存在<开始标签 v-text="data中的变量名"></结束标签>--><span v-text="msg"></span><!-- v-html的用法和v-text用法一直,只不过通过v-html引入的…

0223-IP 协议部分字段解释

环境Time 2022-11-20 WSL-Ubuntu 22.04 Rust 1.65.0 pnet 0.31.0 tun-tap 0.1.3前言 说明 参考:https://docs.rs/pnet/latest/pnet/index.html 参考:RFC 791 目标 上一篇已经看过了 IP 协议的一部分字段,这里继续了解剩下的部分。 main.rs use pnet::packet::ipv4::Ipv4Pack…

Apifox 深度分析:为什么它是不可错过的 API 管理平台

无论是大型企业还是初创公司,高效的 API 管理都是确保业务顺利运行的重要环节。然而,随着项目规模的扩大和团队的壮大,API 的设计、开发、测试和文档管理往往变得越来越复杂。无论是大型企业还是初创公司,高效的 API 管理都是确保业务顺利运行的重要环节。然而,随着项目规…

通过这五个问题,带你深入了解中国式报表

一、什么是中国式报表? 中国式报表,顾名思义具有中国特色的报表,通常指的是中国企业/机构在财务和业务报告方面的特有风格和规范。二、中国式报表有什么特点? 一句话就可以概括中国式报表:结构复杂、数据量大的一种报表。 格式复杂:为了能够展示更为详尽的数据分类和汇总…

unity2022.3.9+Pico更换渲染管线后打包,人物材质不可显示问题

为了解决字体和场景闪烁问题吗,更换渲染管线 旧项目管线是URP 新的项目管线是内置管线 build in()内置管线需要设置两个地方,可以解决人物材质不显示问题 1.PICO-Stereo Rendering Mode 选择 Multi Pass 模式 2,Player-OtherSetting-Auto Graphics API勾选 (注:项目中…

变电站弱电系统集成常见设备

"名称" 规格型号质量技术标准 不间断电源 UPS 输入 220VAC 96VDC/输出 220VAC/容量≥20kVA蓄电池 " UPS 功能 6000W 13 度 1200 万毫安 立式/磷酸铁锂"开关柜储能电机 DC48V/永磁直流电动机开关柜储能电机 DC110V/永磁直流电动机EPS 逆变器 " …

猪脸识别、自动投喂!Apache DolphinScheduler还能做这些?

数字化转型提速中!传统农牧食品行业也寻求搭上数字化转型的快车,通过物联网、大数据、人工智能等现代信息技术,实现生产、加工、流通等环节的智能化和自动化,提高生产效率、优化资源配置、提升产品质量,并满足消费者对食品安全和可追溯性的需求。 在数字化浪潮的推动下,铁…

【YashanDB数据库】YashanDB如何回收表空间

确认表空间高水位线,是否有可回收空间。 select a.tablespace_name,a.high_water_mark,b.user_bytes,b.total_bytes from (SELECT tablespace_name, max(header_block+blocks) * 8192 AS high_water_mark FROM dba_segments WHERE tablespace_name = USERS GROUP BY tablespac…

支付宝当面付快速接入网页h5

支付宝当面付快速接入网页h5第一步开放平台申请 网页应用,下载 支付宝开放平台密钥工具 V2.0.3 选择生成【证书】【RSA2】 应用开发设置 【接口加签方式(密钥/证书)】 上传 ,私钥在本地已经生成,其他3个crt应用申请上传CSR文件.csr 后下载即可| appPrivateKey: appPu…

PbootCMS上传图片被压缩怎么解决

PbootCMS上传图片被压缩怎么解决pb默认是大于1000宽或者高的,自动压缩,所以图片质量损失了,想解决这个,直接打开根目录config文件夹下的config.php和core文件夹下的convention.php,然后找到ico => array(把max_width跟max_height参数调大即可。扫码添加技术【解决问题…

pbootcms网站sqlite转mysql工具转换数据库导入后,出现错误

sqlite转mysql工具转换数据库导入后,出现错误。这是因为工具对应的是2X的版本,3X存在错误,尤其是对默认值处理不好,可以将gtype的默认值删掉即可。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承…