当前位置: 首页 > news >正文

LocalStorage和SessionStorage的区别和应用

LocalStorage 和 SessionStorage 都是浏览器提供的 Web Storage API,常用于前端缓存数据,但它们在生命周期、作用范围、使用场景等方面有明显区别。

一、区别对比表

特性LocalStorageSessionStorage
生命周期永久保存,除非手动删除当前标签页会话,页面关闭即清除
存储大小一般约 5~10MB一般约 5MB
是否随请求发送❌ 不会❌ 不会
页面刷新后✅ 数据还在✅ 数据还在
新标签页打开✅ 共享❌ 不共享
API 同步/异步同步 API同步 API
数据类型支持仅支持字符串(需要手动转换为对象)仅支持字符串(需要手动转换为对象)

二、应用场景分析

LocalStorage:适合需要持久保存的数据

  • 适用场景:

    • 登录 Token(如果非敏感)

    • 用户偏好设置(如主题色、语言)

    • 搜索历史记录、本地草稿

    • 接口缓存数据(非敏感)

  • 示例:

// 存储
localStorage.setItem('token', 'abc123');
localStorage.setItem('theme', 'dark');// 获取
const token = localStorage.getItem('token');// 删除
localStorage.removeItem('token');

SessionStorage:适合临时、当前会话用完就清的数据

  • 适用场景:
    • 多步表单中间数据

    • 登录跳转回之前页面临时状态

    • 某些不希望在新标签页共享的临时变量

  • 示例:
// 存储
sessionStorage.setItem('step1Data', JSON.stringify({ name: '淇淇' }));// 获取
const data = JSON.parse(sessionStorage.getItem('step1Data'));// 清除
sessionStorage.clear();

三、结合实际建议

场景推荐使用原因
登录 token(前端存储时)LocalStorage保留登录状态,刷新不丢失
表单临时数据(多步骤)SessionStorage用户关闭页面即清理,防止数据过期
用户偏好(如语言、主题色)LocalStorage长久生效,适合持久配置
接口缓存(短时间内复用)Vuex + Local/SessionStorage根据数据重要性和时效性选择组合
敏感信息❌建议不存储建议放在 Cookie(HttpOnly)或只存在内存中

四、用LocalStorage封装一个带有效期的缓存方法

/*** LocalStorage 带有效期缓存* ttl 单位:毫秒*/
const LSCache = {/*** 设置缓存* @param {string} key   键名* @param {*}      value 任意可序列化的数据* @param {number} ttl   有效期(毫秒),如 30 分钟 => 30 * 60 * 1000*/set(key, value, ttl) {const expire = Date.now() + ttl;const record = { value, expire };localStorage.setItem(key, JSON.stringify(record));},/*** 读取缓存(自动判断是否过期)* @param  {string} key* @return {*} 数据或 null(不存在 / 已过期)*/get(key) {const str = localStorage.getItem(key);if (!str) return null;try {const { value, expire } = JSON.parse(str);if (expire === 0 || expire >= Date.now()) {return value;}// 过期自动清理localStorage.removeItem(key);} catch (_) {// 数据被篡改或非 JSON,直接删除localStorage.removeItem(key);}return null;},/** 手动删除 */remove(key) {localStorage.removeItem(key);},/** 扫描所有 key,清理过期数据(可在 App 启动或定时调用) */clearExpired() {Object.keys(localStorage).forEach(k => this.get(k));}
};

使用范例

// 存 30 分钟
LSCache.set('token', 'abc123', 30 * 60 * 1000);// 读取
const token = LSCache.get('token');
if (token) {console.log('token 未过期:', token);
}// 手动删除
LSCache.remove('token');// 启动时批量清理过期
LSCache.clearExpired();
http://www.dtcms.com/a/269733.html

相关文章:

  • 马尔可夫决策过程
  • python办公自动化----使用pandas和os合并多个订单表
  • 【python】 `parse_time_to_seconds` 在功能及健壮性上有以下主要区别
  • ​扣子Coze飞书多维表插件添加数据记录
  • 【UE5】虚幻引擎小百科
  • std::function
  • coze平台AI Agent开发入门之工作流的基本使用方法
  • Redis 缓存机制 及问题场景 及解决方案
  • 接口自动化工具-SoapUI
  • kotlin
  • Ubuntu22.04下微星B850M主板 无wifi模块
  • AR 双缝干涉实验亮相:创新科技实验范式,开拓 AR 技术新局​
  • 传输层协议TCP、UDP
  • SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分离版:整体布局、架构调整(二)
  • 基于FPGA的累加算法实现
  • 2. 两数相加
  • 从零实现一个GPT 【React + Express】--- 【1】初始化前后端项目,实现模型接入+SSE
  • 领域驱动设计(DDD)重塑金融系统架构
  • Qt 与Halcon联合开发九:算法类设计与实现讲解(附源码)
  • AlphaEvolve:谷歌的算法进化引擎 | 从数学证明到芯片设计的AI自主发现新纪元
  • 告别“电量焦虑”,BLE如何提升可穿戴设备续航能力?
  • Flutter基础(前端教程④-组件拼接)
  • Linux NUMA调优实战:多线程程序加速方法
  • 电路研究9.3.10——合宙Air780EP中的AT开发指南:阿里云应用指南
  • Deepoc大模型:重构无人机认知边界的具身智能革命
  • 华为泰山服务器重启后出现 XFS 文件系统磁盘“不识别”(无法挂载或访问),但挂载点目录仍在且无数据
  • WPA2 与 WPA3:深入解析Wi-Fi安全协议
  • Linux网络:UDP socket创建流程与简单通信
  • 手机能用酒精擦吗?
  • 前端学习3--position定位(relative+absolute+sticky)