在前端开发中,持久化数据存储是一个非常常见的需求。为了实现这一点,浏览器提供了多种方式,包括 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. 第一篇Scrum冲刺博客--原班人马打造队

    0 项目地址 点此进入 1 第一次开会/任务认领 1.1 第一次例会(2024.4.27) 第一次开会照片记录 1.2 开发认领 在查看老师在实验报告中学长的博客给了我一定的启发,我在腾讯表格中创建了 ...

  2. linux下安装oracle 11g(静默安装)

    关闭selinux 关闭防火墙 检查安装依赖包 yum -y install binutils compat-libcap1 vsftpd gcc gcc-c++ glibc-devel glibc ...

  3. Masonry的进阶使用技巧

    Masonry是iOS开发中常见的视图约束框架,但是有人对他的使用还是浅尝辄止,接下来会提出几点比较少见但是又十分便捷的使用技巧. mas_greaterThanOrEqualTo mas_great ...

  4. Python加密操作 对称加密/非对称加密

    安装包: pycryptodome https://pycryptodome.readthedocs.io/en/latest/src/installation.html#compiling-in-l ...

  5. OpenSSL静态库交叉编译

    一.编译前环境准备 使用的内核:4.15.0-118-generic(命令:uname -r可以查看) 交叉编译器:aarch64-linux-gnu-gcc openssl源码:openssl-1. ...

  6. Docker Harbor的安装配置

    1.先安装docker-compose curl -L http://github.com/docker/compose/releases/download/1.21.2/docker-compose ...

  7. unp.h的安装以及第一个程序的运行

    unp.h的安装以及第一个程序的运行 源代码下载以及编译 点击此处下载源代码 解压到本地文件夹,如果访问不了GitHub的话就用我搬到gitee的仓库吧 git clone https://gitee ...

  8. 脚本与数据的解耦 + Page Object模型

    标签(空格分隔): 脚本与数据的解耦 + Page Object模型 测试脚本和数据的解耦 你现在已经掌握了一些基本的 GUI 自动化测试用例的实现方法,是不是正摩拳擦掌准备批量开发 GUI 自动化脚 ...

  9. 在OwinSelfHost项目中获取客户端IP地址

    在OwinSelfHost项目中,获取客户端的IP地址可以通过以下方法获得: base.Request.GetOwinContext().Request.RemoteIpAddress 创建一个Owi ...

  10. Java高效率查询Mysql节点树数据

    示例 目前有一个功能:任务计划管理,必然存在多级子任务的父子级关系,每个任务还会存在其它数据的关联表. mysql无法一次性递归查出想要的数据结构,想必很多人都会是通过根目录递归查询数据库的方式查出树 ...