localStorage和sessionStorage区别

localStoragesessionStorage 都是浏览器提供的本地存储机制,允许在客户端存储数据。它们的主要区别在于数据的生命周期作用域。以下是详细对比和示例:


区别对比

特性localStoragesessionStorage
生命周期数据永久存储,除非手动删除或清除浏览器缓存。数据仅在当前会话有效,关闭浏览器标签页后数据被清除。
作用域数据在同一域名下的所有标签页和窗口共享。数据仅在当前标签页或窗口内有效,不同标签页不共享。
存储容量通常为 5MB 左右(不同浏览器可能不同)。通常为 5MB 左右(不同浏览器可能不同)。
适用场景需要长期存储的数据,如用户偏好设置。临时存储的数据,如表单数据、会话信息。

示例

1. localStorage 示例
// 存储数据
localStorage.setItem('username', 'JohnDoe');// 读取数据
const username = localStorage.getItem('username');
console.log(username); // 输出: JohnDoe// 删除数据
localStorage.removeItem('username');// 清空所有数据
localStorage.clear();

特点

  • 数据在页面刷新或关闭后仍然存在。
  • 在同一域名下的不同标签页中可以访问相同的数据。

2. sessionStorage 示例
// 存储数据
sessionStorage.setItem('token', 'abc123');// 读取数据
const token = sessionStorage.getItem('token');
console.log(token); // 输出: abc123// 删除数据
sessionStorage.removeItem('token');// 清空所有数据
sessionStorage.clear();

特点

  • 数据仅在当前标签页有效,关闭标签页后数据被清除。
  • 不同标签页之间的 sessionStorage 数据是隔离的。

使用场景

localStorage 场景
  • 存储用户偏好设置(如主题、语言)。
  • 存储长期有效的用户登录状态或 token(需注意安全性)。
  • 缓存应用数据,减少服务器请求。
sessionStorage 场景
  • 存储表单数据,避免页面刷新后数据丢失。
  • 存储临时会话信息,如购物车数据。
  • 在单页应用(SPA)中存储页面间的临时状态。

注意事项

  1. 数据大小限制:两者通常有 5MB 的存储限制,超出可能导致错误。
  2. 安全性:不要存储敏感信息(如密码、信用卡号),因为数据容易被读取。
  3. 数据类型:两者只能存储字符串,存储对象或数组时需要使用 JSON.stringifyJSON.parse
  4. 作用域localStorage 数据在同一域名下共享,而 sessionStorage 数据仅在当前标签页有效。

总结

  • 如果需要长期存储数据,使用 localStorage
  • 如果需要临时存储数据(仅在当前会话有效),使用 sessionStorage
  • 根据具体需求选择合适的方式,避免滥用存储机制。

需要本地存储的场景

  1. 持久化用户数据

    • 存储用户登录状态、token 或用户偏好设置(如主题、语言)。
    • 示例:用户登录后,将 token 存储在 localStorage 中,以便页面刷新后仍能保持登录状态。
  2. 缓存数据

    • 缓存从服务器获取的数据,减少重复请求,提升应用性能。
    • 示例:将 API 返回的数据存储在 localStorage 中,设置过期时间,避免频繁请求。
  3. 表单数据临时存储

    • 在用户填写表单时,临时保存数据,防止页面刷新或意外关闭导致数据丢失。
    • 示例:使用 sessionStorage 存储表单数据,用户刷新页面后数据仍然存在。
  4. 离线应用

    • 在离线场景下,使用本地存储保存数据,待网络恢复后再同步到服务器。
    • 示例:离线笔记应用,将笔记内容存储在 localStorage 中。
  5. 跨页面数据共享

    • 在同一域名下的不同页面间共享数据。
    • 示例:使用 localStorage 存储购物车数据,用户在不同页面间跳转时数据保持一致。

不需要本地存储的场景

  1. 纯静态页面

    • 如果应用是纯静态页面,没有需要持久化的数据,则不需要本地存储。
  2. 数据安全性要求高

    • 如果数据涉及敏感信息(如密码、支付信息),不适合存储在本地,因为 localStoragesessionStorage 容易被读取。
  3. 数据实时性要求高

    • 如果数据需要实时更新(如股票价格、聊天消息),不适合存储在本地,因为本地存储无法自动同步服务器数据。
  4. 数据量较大

    • 如果数据量较大(超过 5MB),localStoragesessionStorage 可能无法满足需求,需要考虑其他存储方案(如 IndexedDB)。

总结

  • 需要本地存储的场景包括:持久化用户数据、缓存数据、表单临时存储、离线应用、跨页面数据共享等。
  • 不需要本地存储的场景包括:纯静态页面、数据安全性要求高、数据实时性要求高、数据量较大等。

根据你的应用场景,判断是否需要使用本地存储,并合理选择存储方式。

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

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

相关文章

Blender制作次表面材质

效果: 主要用沃罗诺伊纹理做出云絮感 然后EV开启次表面设置

服务器数据恢复—服务器raid故障导致上层分区不可用的数据恢复案例

服务器数据恢复环境&故障: 一台服务器中有一组由三块SAS硬盘组建的raid阵列。服务器上部署的数据库存储在D分区,数据库备份存储在E分区。 服务器上一块硬盘指示灯显示红色。D分区不可识别。E分区虽然可以识别,但是E分区拷贝文件报错。 管…

PyTorch PINN实战:用深度学习求解微分方程

神经网络技术已在计算机视觉与自然语言处理等多个领域实现了突破性进展。然而在微分方程求解领域,传统神经网络因其依赖大规模标记数据集的特性而表现出明显局限性。物理信息神经网络(Physics-Informed Neural Networks, PINN)通过将物理定律直接整合到学习过程中&a…

关于“碰一碰发视频”系统的技术开发文档框架

以下是关于“碰一碰发视频”系统的技术开发文档框架,涵盖核心功能、技术选型、开发流程和关键模块设计,帮助您快速搭建一站式解决方案 --- 随着短视频平台的兴起,用户的创作与分享需求日益增长。而如何让视频分享更加便捷、有趣&#xff0c…

【VUE】day05-ref引用

这里写目录标题 1. ref引用1.1 使用ref引用组件 2. this.$nextTick(cb)方法3. 购物车案例3.1 数组中的方法 - some循环3.2 数组中的方法 - every循环3.3 数组中的方法 - reduce 4. 购物车案例 1. ref引用 ref用来辅助开发者在不依赖于jQuery的情况下,获取DOM元素或…

docker安装milvus向量数据库Attu可视化界面

Docker 部署 Milvus 及 Attu 可视化工具完整指南 一、环境准备 安装 Docker 及 Docker Compose Docker 版本需 ≥20.10.12Docker Compose 版本需 ≥2.20.0(推荐 V2) 验证 Docker 环境 docker --version && docker-compose --version若出现&…

nacos安装,服务注册,服务发现,远程调用3个方法

安装 点版本下载页面 服务注册 每个微服务都配置nacos的地址,都要知道 服务发现 2个是知道了解 远程调用基本实现 远程调用方法2,负载均衡API测试 远程调用方法3,注解 负载均衡的远程调用, 总结 面试题

MySQL:数据库基础

数据库基础 1.什么是数据库?2.为什么要学习数据库?3.主流的数据库(了解)4.服务器,数据库,表之间的关系5.数据的逻辑存储6.MYSQL架构7.存储引擎 1.什么是数据库? 数据库(Database,简称DB)&#x…

Kotlin 基础语法

1. 🌟 Kotlin:Java 的“超级进化体”? Kotlin 是一门由 JetBrains 开发的 现代静态类型编程语言,支持 JVM、Android、JavaScript、Native 等多平台: Kotlin 与 Java 深度兼容,Kotlin 会编译为 JVM 字节码&#xff0c…

基于RAGFlow本地部署DeepSeek-R1大模型与知识库:从配置到应用的全流程解析

作者:后端小肥肠 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 姊妹篇: DeepSpeek服务器繁忙?这几种替代方案帮你流畅使用!(附本地部署教程)-CSDN博客 10分钟上手…

uniapp APP权限弹框

效果图 第一步 新建一个页面,设置透明 {"path": "pages/permissionDisc/permissionDisc","style": {"navigationBarTitleText": "","navigationStyle": "custom","app-plus": {&…

【深度学习与大模型基础】第7章-特征分解与奇异值分解

一、特征分解 特征分解(Eigen Decomposition)是线性代数中的一种重要方法,广泛应用于计算机行业的多个领域,如机器学习、图像处理和数据分析等。特征分解将一个方阵分解为特征值和特征向量的形式,帮助我们理解矩阵的结…

麒麟V10 arm cpu aarch64 下编译 RocketMQ-Client-CPP 2.2.0

国产自主可控服务器需要访问RocketMQ消息队列,最新的CSDK是2020年发布的 rocketmq-client-cpp-2.2.0 这个版本支持TLS模式。 用默认的版本安装遇到一些问题,记录一下。 下载Releases apache/rocketmq-client-cpp GitHubhttps://github.com/apache/roc…

Moonlight-16B-A3B: 变革性的高效大语言模型,凭借Muon优化器打破训练效率极限

近日,由Moonshot AI团队推出的Moonlight-16B-A3B模型,再次在AI领域引发了广泛关注。这款全新的Mixture-of-Experts (MoE)架构的大型语言模型,凭借其创新的训练优化技术,特别是Muon优化器的使用,成功突破了训练效率的极…

在windows下安装windows+Ubuntu16.04双系统(下)

这篇文章的内容主要来源于这篇文章,为正式安装windowsUbuntu16.04双系统部分。在正式安装前,若还没有进行前期准备工作(1.分区2.制作启动u盘),见《在windows下安装windowsUbuntu16.04双系统(上)》 二、正式安装Ubuntu …

一次Linux下 .net 调试经历

背景: Xt160Api, 之前在windows下用.net调用,没有任何问题。 但是移植到Linux去后,.net程序 调用 init(config_path) 总是报错 /root/test 找不到 traderApi.ini (/root/test 是程序目录) 然后退出程序 解决过程: 于是考虑是不是参数传错了&…

AI爬虫 :Firecrawl的安装和详细使用案例(将整个网站转化为LLM适用的markdown或结构化数据)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. Firecrawl概述1.1 Firecrawl介绍1.2 Firecrawl 的特征1.3 Firecrawl 的功能1.4 Firecrawl的 API 密钥获取2. 安装和基本使用3. 使用 LLM 提取4. 无模式提取(curl语句)5. 使用操作与页面交互6. Firecrawl Cloud7. 移…

【Java集合夜话】第1篇:拨开迷雾,探寻集合框架的精妙设计

欢迎来到Java集合框架系列的第一篇文章!🌹 本系列文章将以通俗易懂的语言,结合实际开发经验,带您深入理解Java集合框架的设计智慧。🌹 若文章中有任何不准确或需要改进的地方,欢迎大家指出,让我…

网络安全知识:网络安全网格架构

在数字化转型的主导下,大多数组织利用多云或混合环境,包括本地基础设施、云服务和应用程序以及第三方实体,以及在网络中运行的用户和设备身份。在这种情况下,保护组织资产免受威胁涉及实现一个统一的框架,该框架根据组…

企业级云MES全套源码,支持app、小程序、H5、台后管理端

企业级云MES全套源码,支持app、小程序、H5、台后管理端,全套源码 开发环境 技术架构:springboot vue-element-plus-admin 开发语言:Java 开发工具:idea 前端框架:vue.js 后端框架&#xff…