前端存储三剑客:localStorage、sessionStorage与Cookie解析

在浏览器中,本地存储(localStorage)、会话存储(sessionStorage)和 Cookie 都是用于在客户端保存数据的方式,但它们在生命周期、作用域、存储大小、安全性、HTTP 传输等方面有显著区别。


🔍 一、三者核心区别对比表

特性localStoragesessionStorageCookie
生命周期永久存储,除非手动清除仅在当前会话期间有效(关闭标签页即清除)可设置过期时间(ExpiresMax-Age
作用域(域名/路径)同源(协议+域名+端口)同源可指定路径、域名、安全标志
存储大小~5–10 MB(各浏览器略有差异)~5–10 MB~4 KB(单个 cookie)
是否随 HTTP 请求自动发送❌ 否❌ 否✅ 是(除非 HttpOnly
是否可被 JavaScript 访问✅ 是✅ 是✅ 是(除非 HttpOnly
安全性低(易被 XSS 攻击)低(同上)中高(HttpOnlySecureSameSite 可增强)
跨标签页共享✅ 是(同一源)❌ 否(仅当前标签页)✅ 是(如果域名和路径相同)

🧩 二、使用场景详解

localStorage:适合长期持久化数据

  • 适用场景
    • 用户偏好设置(如主题颜色、语言、字体大小等);
    • 登录状态记忆(如“记住我”功能);
    • 缓存静态资源或用户本地数据(如离线笔记、购物车草稿);
    • 单页应用(SPA)中跨页面共享状态。
  • 注意
    • 不适合存储敏感信息(如密码、Token),除非配合加密;
    • 大量数据可能导致性能下降或存储溢出。

sessionStorage:适合临时会话级数据

  • 适用场景
    • 表单填写过程中的临时数据保存(如用户填写了一半的注册表单,刷新后还能保留);
    • 临时状态管理(如“当前正在编辑哪个页面”);
    • 防止重复提交(在提交前设置一个标志位,提交成功后清除);
  • 注意
    • 关闭标签页后数据自动丢失,不能跨标签页共享;
    • 适合“本次会话”内使用的数据,不建议用于长期保存。

Cookie:适合与服务器通信,管理会话或身份验证

  • 适用场景
    • 用户登录态管理(如 JSESSIONIDAuth-Token);
    • 跟踪用户行为(如广告追踪、分析工具 GA);
    • 保持用户的会话状态(如购物车信息,由服务端维护);
    • 防止 CSRF 攻击(配合 SameSiteSecure 标志);
  • 最佳实践
    • 使用 HttpOnly:防止 XSS 攻击窃取 Cookie;
    • 使用 Secure:确保 Cookie 只通过 HTTPS 传输;
    • 使用 SameSite=StrictLax:防止 CSRF 攻击;
    • 尽量减少 Cookie 大小(单个 Cookie ≤ 4KB);
    • 避免在 Cookie 中存储敏感信息(如密码);

📌 三、最佳实践总结

类型最佳实践
localStorage- 仅用于非敏感数据
- 使用 JSON.stringify / parse 进行序列化
- 定期清理过期数据
- 添加前缀避免命名冲突(如 app_user_pref_theme
sessionStorage- 用于临时数据,不依赖持久化
- 提交前就应提交到后端,避免依赖前端存储
- 关闭标签页后自动清除,无需手动管理
Cookie- 优先使用 HttpOnly + Secure + SameSite=Lax
- 控制大小,避免发送不必要的数据
- 使用 max-ageexpires 设置合理过期时间
- 使用 path 限制访问路径,提高安全性

🛠️ 四、工具函数示例(封装)

// 本地存储工具const Storage ={// localStorage 读写setLocal(key, value){ localStorage.setItem(key,JSON.stringify(value));},getLocal(key, defaultValue =null){const item = localStorage.getItem(key);return item ?JSON.parse(item): defaultValue;},// sessionStorage 读写setSession(key, value){ sessionStorage.setItem(key,JSON.stringify(value));},getSession(key, defaultValue =null){const item = sessionStorage.getItem(key);return item ?JSON.parse(item): defaultValue;},// Cookie 读写(带安全标志)setCookie(name, value, days =7, path ='/'){const expires =newDate(); expires.setTime(expires.getTime()+ days *24*60*60*1000); document.cookie =`${name}=${encodeURIComponent(value)};expires=${expires.toUTCString()};path=${path};Secure;HttpOnly;SameSite=Lax`;},getCookie(name){const value =`; ${document.cookie}`;const parts = value.split(`; ${name}=`);if(parts.length ===2)returndecodeURIComponent(parts.pop().split(';').shift());returnnull;}};

✅ 五、总结

localStorage:长期保存,跨页面共享,适合用户偏好、离线数据。sessionStorage:仅当前会话有效,适合临时状态、表单草稿。Cookie:随 HTTP 请求自动发送,适合身份验证、会话管理,必须配合安全标志使用

六、附录(前端数据存储选型决策树)

你需要存储什么类型的数据?

数据需要长期保存吗?

是否需要跨标签页共享?

是否仅用于当前会话?

使用 localStorage

使用 sessionStorage

使用 sessionStorage

数据需要随 HTTP 请求发送给服务器吗?

是否涉及用户身份或敏感信息?

使用 Cookie + HttpOnly + Secure + SameSite=Lax

使用 Cookie(但控制大小)

优先考虑 localStorage 或 sessionStorage

Read more

基于深度学习YOLO算法+qwen deepseek大模型的无人机河道巡检系统平台 支持AI对话与文档生成分析

基于深度学习YOLO算法+qwen deepseek大模型的无人机河道巡检系统平台 支持AI对话与文档生成分析

YOLO+DeepSeek河道环境检测系统 项目简介 基于改进YOLO深度学习模型与DeepSeek大语言模型的河道环境智能检测与分析系统。本系统采用先进的计算机视觉技术,结合自然语言处理能力,实现对河道环境中各类目标的高精度检测与智能分析。系统支持单张图片、批量图片、视频文件及实时摄像头等多种输入方式,提供从环境检测到智能建议的完整解决方案,为河道治理、环境保护与水资源管理提供智能化技术支持。 ✨ 核心亮点 • 多场景检测支持:全面覆盖单张图片、图片文件夹、视频文件、实时摄像头四种输入方式 • 改进YOLO模型:基于YOLOv5/v8/v11/v12的优化版本,专注河道环境目标检测 • AI智能分析:集成DeepSeek/Qwen大模型,生成专业的河道环境分析与治理建议 • 实时处理反馈:前端实时展示检测进度与结果,支持实时视频流处理 • 完整技术栈:PyTorch深度学习 + SpringBoot后端 + Vue3前端 + Flask中台的完整架构 • 开箱即用:提供完整源码、预训练模型与详细部署文档,快速上手使用 🌊 检测对象范围 系统可精准识别河道

【FPGA入坑指南第二章】安装vivado/vitis2023.1软件

【FPGA入坑指南第二章】安装vivado/vitis2023.1软件

本栏目的初心 降低FPGA的门槛,让所有对FPGA感兴趣的,之前望而却步的朋友也能上手玩一玩,体验一下FPGA的世界。【本栏作者贯彻“先进入再深入”的中心思想】 引文 * AMD官方软件下载地址 vivado开发者工具 * 百度云下载包 Xilinx2023.1安装包「其他版本可以联系作者」 简介 Vivado和Vitis是Xilinx(现为AMD的一部分)推出的两款核心软件工具,它们在FPGA和SoC(系统级芯片)设计中占据着重要地位。这两款软件的推出代表了Xilinx在数字设计领域的持续创新与发展,并且逐步取代了早期的ISE和SDK工具套件。 ISE和SDK的历史背景 在Vivado和Vitis推出之前,Xilinx的ISE(Integrated Software Environment)是FPGA设计的主要开发环境。ISE主要用于Xilinx早期的FPGA系列,如Spartan和Virtex系列。ISE支持从RTL设计、综合、布局布线到生成比特流文件的整个设计流程,但其在时序优化、设计复杂度和开发效率方面逐渐暴露出一些局限性,尤其是对于更高端的FPGA系列和

【花雕学编程】Arduino BLDC 之四足仿生穿越机器人

【花雕学编程】Arduino BLDC 之四足仿生穿越机器人

基于 Arduino 的四足仿生穿越机器人,是一个融合了仿生学、自动控制、机械电子和传感器技术的复杂系统。它旨在模仿四足动物(如狗、猫或昆虫)的运动方式,以实现对复杂、非结构化地形的强大适应能力。 主要特点 仿生多关节驱动与步态生成 这类机器人的核心在于其腿部结构和运动控制逻辑。 多自由度腿构型: 每条腿通常由多个连杆和关节(如髋关节、膝关节)组成,形成2至4个自由度。这种串联机构的设计借鉴了哺乳动物的骨骼肌肉系统,使其能够完成抬腿、摆动、支撑和蹬地等复合动作。 BLDC 高性能驱动: 相较于传统舵机,无刷直流电机凭借其高功率密度、高扭矩输出和低发热特性,成为驱动关节的理想选择。配合减速器(如谐波减速器),能提供穿越崎岖地形所需的瞬间爆发力和持续推力。 步态算法: Arduino(或与其协同的高性能处理器)通过运行步态生成算法(如三角步态、对角小跑等),精确协调四个腿部的运动时序,确保在任何时刻机器人都有至少三条腿着地以维持动态平衡。 柔顺控制与环境交互 真正的仿生不仅在于形似,更在于“触感”。 力矩与阻抗控制: 结合 FOC(磁场定向控制)

OpenClaw实战系列01:OpenClaw接入飞书机器人全接入指南 + Ollama本地大模型

文章目录 * 引言 * 第一步:环境准备与核心思想 * 第二步:部署Ollama——把大模型“养”在本地 * 1. 安装 Ollama * 2. 拉取并运行模型 * 3. 确认API可用性 * 第三步:安装OpenClaw——AI大脑的“躯干” * 1. 安装Node.js * 2. 一键安装 OpenClaw * 3. 验证安装 * 第四步:打通飞书——创建并配置机器人 * 1. 创建飞书应用 * 2. 配置机器人能力 * 3. 发布应用 * 第五步:OpenClaw与飞书“握手” * 方法一:使用 onboard 向导重新配置(推荐最新版) * 方法二:手动添加渠道 * 批准配对 * 第六步:实战测试与玩法拓展