前端存储三剑客: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

Ubuntu/Debian VPS 上 Apache Web 服务器的完整配置教程

Apache 是互联网上最流行的 Web 服务器之一,用于托管超过半数活跃网站。尽管市面上存在许多可用的 Web 服务器,但由于 Apache 的普遍性,了解其工作原理仍然具有重要意义。 本文将分享 Apache 的通用配置文件及其可配置选项。文中将以 Ubuntu/Debian 系统的 Apache 文件布局为例进行说明,这种布局方式与其他 Linux 发行版的配置层级结构有所不同。 版本兼容性 说明 :本教程已在 Ubuntu 22.04 LTS、Ubuntu 24.04 LTS、Ubuntu 25.04 以及 Debian 11、Debian 12 系统上通过验证测试。所有展示的命令和配置均兼容上述版本,且 Apache 配置结构与命令(如 a2ensite、

我用 Vibe Code 做出了漂亮的 Web 应用,但 AI 依然无法为 Google Search 自动生成一个简单的 Sitemap

我用 Vibe Code 做出了漂亮的 Web 应用,但 AI 依然无法为 Google Search 自动生成一个简单的 Sitemap 在最近一段时间里,我看到很多开发者和创业者开始用 AI 工具做网站、Web 应用这些东西,比如所谓的 vibe coding 平台:快速生成页面、美观的前端、自动部署等等。乍一看体验很棒,但当你开始关注 SEO 和搜索引擎索引时,这一切就变得很不那么简单了。 我自己做过很多网站的 SEO,这本应该是个“十分钟搞定”的事儿 —— “生成 sitemap.xml,提交到 Google Search Console,搞定。” 但是在实际操作中,问题远比想象复杂。 项目背景 我做的第一个项目是一个在线餐厅目录:收集了所有提供食物过敏菜单的餐厅信息,供过敏患者快速查询。

Qwen3-1.7B支持流式响应?实战验证与前端集成教程

Qwen3-1.7B支持流式响应?实战验证与前端集成教程 最近在折腾大模型应用开发,特别是想给前端加个实时聊天的效果,就一直在找支持流式输出的轻量级模型。Qwen3系列开源后,我第一时间注意到了1.7B这个版本——参数小,部署快,但官方文档里关于流式响应的说明不太详细。 所以,我决定自己动手验证一下:Qwen3-1.7B到底支不支持流式响应?如果支持,怎么在前端项目里用起来?这篇文章就是我的实战记录,从环境搭建、接口测试到前端集成,一步步带你走通整个流程。 1. 环境准备与快速启动 要在本地或者云端快速体验Qwen3-1.7B,最省事的方法就是直接用现成的Docker镜像。这里我以ZEEKLOG星图平台的镜像为例,带你快速启动一个可用的环境。 1.1 启动Jupyter Notebook环境 1. 找到Qwen3-1.7B的镜像并启动。平台通常会提供一个预装好所有依赖的容器。 2. 容器启动后,直接打开提供的Jupyter Notebook链接。你会看到一个熟悉的网页界面,里面已经配置好了Python环境和必要的库。 这样,我们就不用操心安装PyTorch、Tran

0基础转行网络安全,选择pwn还是web?零基础入门到精通,收藏这一篇就够了

0基础转行网络安全,选择pwn还是web?零基础入门到精通,收藏这一篇就够了

随着5G、工业互联网、人工智能等新兴领域技术的兴起,从而快速推动了各国从人人互联迈向万物互联的时代。 奇安信董事长齐向东曾说过:“如果说5G带来了物联网和人工智能的风口,那么网络安全行业就是风口的平方——风口的风口。" 因此,有不少年轻人纷纷想加入网络安全行业,抢占先机。 但由于网络安全行业的岗位很多,例如:信息安全工程师、渗透测试工程师、应急响应、逆向安全、溯源取证、安全架构师、恶意软件分析师等等,导致很多人不知道从哪个方向学起。 下面盾叔凭借自己入行十几年的经验给大家详细说说: 其实,对于学习网络安全的学者们,建议从web安全学起。为什么这么说呢? 首先,web安全相对于整个网络安全行业来说难度是相对比较低的,学起来更加容易入手。虽然渗透测试工程师、溯源取证、红蓝攻防等等这些岗位看起来很不错,但是技术门槛特别高,对于0基础的人来说学起来会相当吃力。所以,web安全方向对于初学者来说是最好入门选择。 现阶段,爆发安全问题最多的就是web安全,大部分攻击都是从web安全入手的。例如:内网渗透、工控安全都要依托于web安全。因此,web安全在整个网络攻击中起着特别关键的作用