首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年08月13日 15:25

在前端开发中,持久化数据存储是一个非常常见的需求。为了实现这一点,浏览器提供了多种方式,包括 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站技术蛋老师,侵删

 

From:https://www.cnblogs.com/zx618/p/18357210
本文地址: http://shuzixingkong.net/article/1060
0评论
提交 加载更多评论
其他文章 《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(4)-再识Wireshark
1.简介 按照以前的讲解和分享路数,宏哥今天就应该从外观上来讲解WireShark的界面功能了。 2.软件界面 由上到下依次是标题栏、主菜单栏、主菜单工具栏、显示过滤文本框、打开区、最近捕获并保存的文件、捕获区、捕获过滤文本框、本机所有网络接口、学习区及用户指南等。 2.1启动界面 首次打开启动 W
《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(4)-再识Wireshark 《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(4)-再识Wireshark 《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(4)-再识Wireshark
python连接钉钉自动化提交OA审批
一、准备工作 1、安装阿里云支持包,点击跳转:https://open.dingtalk.com/document/resourcedownload/download-server-sdk 2、注册钉钉开发者账号,点击链接:https://open.dingtalk.com/ 3、获取AK,SK 4
Python网页应用开发神器fac 0.3.0全新版本发布
大家好我是费老师,在Python生态中,有很多以Python为主要开发语言,实现网页应用开发的框架,其中最为知名的有Dash、flet、streamlit、gradio、nicegui等。 如果综合考虑流行度、开发效率、开发自由度、相关生态成熟度、可拓展性、安全性等各方面的能力,Dash是其中天花板
Python网页应用开发神器fac 0.3.0全新版本发布 Python网页应用开发神器fac 0.3.0全新版本发布 Python网页应用开发神器fac 0.3.0全新版本发布
Java栈溢出|内存泄漏|内存溢出
Java虚拟机栈是线程私有的,它的生命周期和线程同步 一个线程每执行到一个方法,JVM就会创建一个栈帧(用于存储基本数据类型、对象指针和返回值等),并将栈帧压入栈中。 代码示例: public class Example { public static void main(String[] args
Java栈溢出|内存泄漏|内存溢出 Java栈溢出|内存泄漏|内存溢出
Java解决递归造成的堆栈溢出问题
本文简要介绍了Java解决递归造成的堆栈溢出问题的三种方法,并给出了详细的代码示例,清晰直观,如此简单。
Jenkins配置分布式构建环境——添加固定Agent并使用JNLP启动Agent详解
1、概述 在《Jenkins部署架构概述 》这篇博文中对Jenkins部署架构进行了讲解。对于分布式架构,Jenkins包括固态Agent和动态Agent两种方案。 固定Agent(常用于虚拟机):Agent容器一直运行,任务构建完成后不会销毁,创建完成后将一直占用集群资源,配置过程较简单
Jenkins配置分布式构建环境——添加固定Agent并使用JNLP启动Agent详解 Jenkins配置分布式构建环境——添加固定Agent并使用JNLP启动Agent详解 Jenkins配置分布式构建环境——添加固定Agent并使用JNLP启动Agent详解
我们常用的地铁卡/银行卡,竟然运行着一个 Java 虚拟机
我们日常使用 NFC 卡可以用来刷地铁,进出门禁,但是你有没有想过, 当我们使用一个 NFC 的 IC 卡刷卡进入地铁的时候,此时系统是如何知道我这个卡上有多少充值余额的? 这个薄薄的 NFC 卡到底有什么魔力,除了可以刷卡进地铁,还可以去银行取钱,进出小区门禁。 今天我在看到一些物联网的知识时,在
DRM:清华提出无偏差的新类发现与定位新方法 | CVPR 2024
论文分析了现有的新类别发现和定位(NCDL)方法并确定了核心问题:目标检测器往往偏向已知的目标,忽略未知的目标。为了解决这个问题,论文提出了去偏差区域挖掘(DRM)方法,以互补的方式结合类无关RPN和类感知RPN进行目标定位,利用未标记数据的半监督对比学习来改进表征网络,以及采用简单高效的mini-
DRM:清华提出无偏差的新类发现与定位新方法 | CVPR 2024 DRM:清华提出无偏差的新类发现与定位新方法 | CVPR 2024 DRM:清华提出无偏差的新类发现与定位新方法 | CVPR 2024