当前位置: 首页 > 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.lryc.cn/news/582566.html

相关文章:

  • UI前端与数字孪生结合实践案例:智慧零售的库存管理优化系统
  • 车载HMI革命:从物理按键到智能表面的交互逻辑重构
  • 高版本的MacOS如何降级?
  • 250708-Debian系统安装Edge浏览器并配置最小中文输入法
  • KTM5910,24bit 绝对角度磁性编码器,在轴应用,- 内部集成超高性能双 16bit 2M SAR ADC
  • VMware克隆虚拟机,模板机已提前设置了固定IP,克隆机需要修改的事项
  • ECS由浅入深第三节:进阶?System 的行为与复杂交互模式
  • 【openGLES】安卓端EGL的使用
  • GitOps实践指南:GitLab CI/CD + ArgoCD 实现 Kubernetes 自动化部署
  • 如何开发第一个你的dapp项目?
  • 闲庭信步使用图像验证平台加速FPGA的开发:第四课——RGB转HSV的FPGA实现
  • 利用外部Postgresql及zookeeper,启动Apache Dolphinscheduler3.1.9
  • 进阶向:Python音频录制与分析系统详解,从原理到实践
  • 3.直面分布式核心挑战:厘清概念、破解雪崩与熔断之道
  • 采煤机:技术革新驱动下的全球市场格局与未来趋势
  • 2025年前端面试题
  • C++ 选择排序、冒泡排序、插入排序
  • 云原生安全观察:零信任架构与动态防御的下一代免疫体系
  • 小红书APP品牌升级,启用新品牌口号“你的生活兴趣社区”
  • Axure-9高级教程:Axure函数使用手册-免费
  • Menu:菜单控件应用实例
  • Python入门Day5
  • 【华为昇腾|CUDA】服务器A6000显卡部署LLM实战记录
  • RISC-V:开源芯浪潮下的技术突围与职业新赛道 (一)为什么RISC-V是颠覆性创新?
  • Redis常用数据结构以及多并发场景下的使用分析:Sorted List类型
  • 算法设计与分析 知识总结
  • 【Python-GEE】如何利用Landsat时间序列影像通过调和回归方法提取农作物特征并进行分类
  • Paimon本地表查询引擎LocalTableQuery详解
  • DVWA靶场通关笔记-SQL盲注(SQL Injection Blind Medium级别)
  • 【Mac】实现Docker下载安装【正在逐步完善】