前端存储三剑客:localStorage、sessionStorage、cookie 超详细对比

前端存储三剑客:localStorage、sessionStorage、cookie 超详细对比

在前端开发中,数据本地存储是提升用户体验、优化性能、实现持久化状态的核心技术。我们最常用的就是 localStoragesessionStoragecookie 这三种方案,但很多开发者容易混淆它们的用法、存储特性和适用场景。

这篇博客就用最清晰、最实用的方式,一次性讲透三者的区别、用法和最佳实践。


一、先搞懂核心概念

  • cookie:最早的客户端存储方案,会随 HTTP 请求自动发送到服务器,主要用于身份验证、会话保持。
  • localStorage:HTML5 新增的本地存储,持久化存储,手动清除才会消失,不参与网络请求。
  • sessionStorage:HTML5 新增的会话存储,页面会话期间有效,关闭标签页 / 浏览器就清空。

二、核心区别一张表看懂

表格

特性localStoragesessionStoragecookie
生命周期永久有效,手动清除仅当前会话(关闭标签 / 浏览器失效)可设置过期时间,默认会话级
存储容量5MB5MB很小,仅 4KB
与服务端通信不参与不参与自动携带在 HTTP 请求头中
访问权限同源(协议 + 域名 + 端口)共享同源 + 同一标签页 共享同源共享
API 易用性简单,键值对 API简单,键值对 API原生 API 繁琐,需手动封装
安全性较高,不发往服务器较高,不发往服务器需配置 HttpOnly/Secure 防攻击
数据类型仅支持 字符串仅支持 字符串仅支持 字符串
一句话总结:存大量数据用 localStorage,临时会话用 sessionStorage,需要给服务器传的状态用 cookie。

三、基础用法速查(代码示例)

三者都是键值对存储,且只能存字符串,复杂对象需用 JSON 转换。

1. localStorage

javascript

运行

// 存 localStorage.setItem('username', '张三'); localStorage.setItem('userInfo', JSON.stringify({ age: 20 })); // 取 const name = localStorage.getItem('username'); const user = JSON.parse(localStorage.getItem('userInfo')); // 删单个 localStorage.removeItem('username'); // 清空全部 localStorage.clear(); 

2. sessionStorage

API 和 localStorage 完全一致,唯一区别是生命周期:

javascript

运行

sessionStorage.setItem('token', '临时令牌'); // 关闭页面立即消失 

3. cookie(原生写法)

原生 API 比较繁琐,推荐封装或用库:

javascript

运行

// 设置 cookie(带7天过期时间) document.cookie = "username=张三; max-age=" + 60*60*24*7; // 获取 cookie const cookie = document.cookie; // 删除 cookie(设置过期时间为过去) document.cookie = "username=; max-age=0"; 

四、关键差异深度解析

1. 生命周期(最重要)

  • localStorage:真正的持久化存储,重启浏览器、关机都不会丢。
  • sessionStorage临时存储,只要标签页一关,数据立刻清空。
  • cookie:灵活可控,可设置 max-age/expires 定义过期时间。

2. 存储容量

  • cookie:4KB —— 只能存少量文本(token、id)。
  • storage:5MB —— 可存大量前端数据(缓存列表、用户配置)。

3. 网络通信(核心区别)

  • cookie每次请求都会自动带到服务端,浪费流量,影响性能。
  • localStorage/sessionStorage不参与通信,纯前端本地使用。

4. 安全性

  • cookie:不配置 HttpOnly 时,JS 可读取,容易被 XSS 攻击;
  • storage:不会自动发送到服务器,相对更安全,但仍需防范 XSS。

五、实际开发怎么选?(最佳实践)

✅ 使用 localStorage 的场景

  • 长期保存用户偏好设置(主题、语言、列表布局)
  • 前端缓存大量数据(商品列表、搜索历史)
  • 不需要传给服务端的持久化状态

✅ 使用 sessionStorage 的场景

  • 表单临时数据(防止刷新丢失,关闭页面自动清空)
  • 单页应用路由状态、临时令牌
  • 同一页面会话内的临时数据
  • 登录态、身份认证 Token(必须让服务端识别)
  • 需要跨页面、跨浏览器持久化且传给后端的数据
  • 服务端需要读取的客户端状态

六、避坑小贴士

  1. 三者都只能存字符串,对象 / 数组必须用 JSON.stringify 存,JSON.parse 取。
  2. cookie 别存大量数据,会严重影响请求性能。
  3. sessionStorage 不跨标签页,打开新页面数据不共享。
  4. localStorage 永久存储,敏感信息不要存(密码、密钥)。
  5. 登录认证优先用 cookie + HttpOnly,安全性最高。

总结

  • localStorage:持久化、大容量、纯本地存储
  • sessionStorage:临时会话、大容量、页面关闭即清空
  • cookie:可过期、小容量、自动传服务端、用于登录认证

掌握这三种存储方案,你就能在前端开发中灵活处理数据持久化,写出更稳定、更高效的代码。


总结

  1. localStorage 适合长期本地缓存,容量大、不发服务器;
  2. sessionStorage 适合临时会话数据,关闭页面自动清空;
  3. cookie 适合需要传给服务端的状态(如登录),容量小、可设置过期。

Read more

本地多模型切换利器——Llama-Swap全攻略

本地多模型切换利器——Llama-Swap全攻略

运行多个大语言模型(LLM)非常有用: 无论是用于比较模型输出、设置备用方案(当一个模型失败时自动切换)、还是实现行为定制(例如一个模型专注写代码,另一个模型专注技术写作),实践中我们经常以这种方式使用 LLM。 一些应用(如 poe.com)已经提供了多模型运行的平台。但如果你希望完全在本地运行、多省 API 成本,并保证数据隐私,情况就会复杂许多。 问题在于:本地设置通常意味着要处理多个端口、运行不同进程,并且手动切换,不够理想。 这正是 Llama-Swap 要解决的痛点。它是一个超轻量的开源代理服务(仅需一个二进制文件),能够让你轻松在多个本地 LLM 之间切换。简单来说,它会在本地监听 OpenAI 风格的 API 请求,并根据请求的模型名称,自动启动或停止对应的模型服务。客户端无需感知底层切换,使用体验完全透明。 📌 Llama-Swap 工作原理 概念上,Llama-Swap 就像一个智能路由器,

虚幻版Pico大空间VR入门教程 05 —— 原点坐标和项目优化技巧整理

虚幻版Pico大空间VR入门教程 05 —— 原点坐标和项目优化技巧整理

大空间头显坐标朝向 一体机p4ue设备开启大空间定位识别,并框选障碍物范围,暂时不用Marker贴图精细定位。 大空间一体机范围设置文档:https://business.picoxr.com/cn/doc/Enterprise-LBE-Bestcase 非企业版设备(具体设备型号查看02章节),如果没有内置大空间功能,则需要使用第三方定位,例如RTK,ubw。 通过UE5默认的VR项目模板,修改SetTrackingOrigin记录:(括号内为UE5.3及以前旧版本枚举选项) OpenXR有线串联模式下, Stage、View(eye、EyeLevel)、Local floor(StandFloor、FloorLevel)、Local(SitFloor)、customOpenXR模式下,大空间标记障碍物和VR场景障碍物匹配, Reset Orientation and Position 则以当前玩家的位置和头显正朝向作为场景默认初始点; (如果玩家朝向东南时触发重置头显,则在VR游戏内,现实世界的东南朝向为VR游戏内的正北, 在大空间模式下需要特别注意重置头显操作,否

盘古200Pro+开发板高速通信指南:6.6Gbps光纤+PCIe x4性能实测

盘古200Pro+开发板高速通信实战:从6.6Gbps理论到稳定传输的工程化路径 对于从事通信系统、数据中心互联或高速数据采集的工程师而言,一块标称性能强劲的FPGA开发板到手后,最令人兴奋也最具挑战的环节,莫过于将手册上的理论速率转化为稳定、可靠的实测性能。紫光同创的盘古200Pro+开发板(基于PG2L200H FPGA,型号MES2L676-200HP)以其高达6.6Gbps的HSST收发器速率和PCIe x4接口,吸引了众多追求高性能国产化方案开发者的目光。然而,在真实的工程环境中,如何驾驭这些高速接口,确保数据传输的完整性与低延迟,远非接上光纤或插入PCIe插槽那么简单。本文将从一个实践者的角度,深入探讨如何在这块开发板上实现光纤与PCIe链路的高性能通信,分享从时钟优化、眼图分析到系统级调优的全流程实战经验。 1. 硬件平台深度解析与高速链路设计要点 盘古200Pro+开发板采用核心板加扩展底板的架构,其高速通信能力的基石在于紫光同创Logos2系列PG2L200H FPGA内嵌的HSST(High-Speed Serial Transceiver)模块。官方宣称每

无人机航拍图像拼接:自动识别重叠区域完成合成

无人机航拍图像拼接:自动识别重叠区域完成合成 引言:从航拍痛点出发,为何需要智能图像拼接? 在农业监测、城市规划、灾害评估等场景中,无人机航拍已成为获取高分辨率地表信息的核心手段。然而,单张航拍图像视野有限,必须通过多张图像拼接才能生成完整的全景图或地图。传统拼接方法依赖SIFT、ORB等特征匹配算法,在光照变化大、纹理重复(如农田、屋顶)的场景下容易失效,导致错位、断裂甚至拼接失败。 更关键的是,传统流程需手动指定图像对的重叠区域,效率低下且难以自动化。随着AI视觉技术的发展,基于深度学习的万物识别模型为解决这一问题提供了新思路——让模型“看懂”图像内容,自动判断哪些区域是重叠的,从而实现端到端的智能拼接。 本文将结合阿里开源的万物识别-中文-通用领域模型,构建一套完整的无人机航拍图像自动拼接方案,重点讲解如何利用该模型语义理解能力精准识别图像重叠区域,并完成高质量合成。 技术选型:为什么选择“万物识别-中文-通用领域”模型? 模型背景与核心优势 “万物识别-中文-通用领域”是阿里巴巴通义实验室推出的一款面向中文场景的通用图像识别模型。其核心目标是实现对日常物体、自