news 2026/4/4 12:01:39

一文了解 Cookie、localStorage、sessionStorage的区别与实战案例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一文了解 Cookie、localStorage、sessionStorage的区别与实战案例

一文了解 Cookie、localStorage、sessionStorage的区别与实战案例

在前端开发中,浏览器存储是不可或缺的核心能力,无论是保存用户登录状态、记住主题偏好,还是暂存表单中间数据,都离不开它。而Cookie、localStorage、sessionStorage作为最常用的三种浏览器存储方案,很多开发者在实际项目中容易混淆它们的使用场景。

本文将从核心特性出发,清晰对比三者的区别,再结合Vue框架给出可直接复用的实战代码案例,帮你彻底搞懂何时用哪种存储方案。

一、核心区别对比(一张表看懂)

先通过一张对比表,快速掌握三者的核心差异知识点:

特性CookielocalStoragesessionStorage
存储容量约 4KB(容量较小,适合存储少量数据)约 5MB(容量较大,可存储更多本地数据)约 5MB(容量较大)
生命周期可手动设置过期时间,默认随会话结束(关闭浏览器)清除永久存储,除非手动清除(清除浏览器缓存、代码删除)会话级存储,关闭当前标签页即清除(同一浏览器不同标签页不共享)
作用域同源(协议、域名、端口一致)下共享,且自动随每次HTTP请求发送到服务器同源下共享,仅通过JS访问,不主动发送给服务器同源且同标签页下共享,不同标签页即使同源也不共享
是否自动发送给服务器是(每次请求都会携带,可能增加请求体积)
访问方式JS和服务器均可访问仅JS可访问仅JS可访问
典型用途会话管理、身份验证(如登录Token)、记住密码长期保存用户偏好(如暗黑模式)、本地缓存不敏感数据暂存单次会话数据(如多步骤表单中间值、页面临时状态)

二、Vue实战案例(可直接复用)

在Vue项目中,不同存储方案的使用方式略有差异,下面结合实际业务场景,给出完整的代码示例。

1. Cookie:适合存储登录状态等需要和服务器交互的数据

Cookie原生API使用起来不够便捷,推荐使用js-cookie库(轻量、易用),专门用于管理Cookie。

步骤1:安装依赖
npm install js-cookie --save
步骤2:实战代码(登录状态管理)

场景:用户登录后保存Token,退出登录时删除Token,页面刷新后保留登录状态。

<template> <div class="login-container"> <h2>用户登录</h2> <input type="text" v-model="username" placeholder="请输入用户名" class="input" > <input type="password" v-model="password" placeholder="请输入密码" class="input" > <button @click="handleLogin" class="btn">登录</button> <button @click="handleLogout" class="btn btn-logout">退出登录</button> <p v-if="token" class="login-status">当前登录状态:已登录(Token:{{ token }})</p> <p v-else class="login-status">当前登录状态:未登录</p> </div> </template> <script> // 引入js-cookie库 import Cookies from 'js-cookie'; export default { name: 'LoginPage', data() { return { username: '', password: '', // 初始化时从Cookie获取Token,无则为空 token: Cookies.get('userToken') || '' }; }, methods: { handleLogin() { // 模拟接口请求登录(实际项目中替换为真实接口) if (this.username && this.password) { const mockToken = 'mock_user_token_123456'; // 接口返回的Token // 设置Cookie:key为userToken,值为mockToken,过期时间1天 Cookies.set('userToken', mockToken, { expires: 1 }); // 更新本地Token状态 this.token = mockToken; alert('登录成功!'); } else { alert('请输入用户名和密码!'); } }, handleLogout() { // 删除Cookie Cookies.remove('userToken'); // 重置状态 this.token = ''; this.username = ''; this.password = ''; alert('退出登录成功!'); } } }; </script>
核心说明
  • 设置Cookie时,expires: 1表示1天后过期,也可设置为具体日期(如new Date('2025-12-31'));
  • 删除Cookie时,需确保Cookies.remove()的key与设置时一致;
  • 适合存储需要和服务器交互的身份信息,因为Cookie会自动随请求发送。

2. localStorage:适合长期保存用户偏好数据

localStorage原生API已足够简洁,无需额外安装依赖,适合存储长期不失效的本地数据。

实战代码(主题切换功能)

场景:用户切换暗黑/亮色主题后,刷新页面依然保留当前主题设置。

<template> <div class="theme-container" :class="theme"> <h2>主题切换演示</h2> <p>当前主题:{{ theme === 'light' ? '亮色模式' : '暗黑模式' }}</p> <button @click="toggleTheme" class="theme-btn">切换主题</button> </div> </template> <script> export default { name: 'ThemeSwitch', data() { return { // 初始化时从localStorage获取主题,无则默认亮色模式 theme: localStorage.getItem('appTheme') || 'light' }; }, methods: { toggleTheme() { // 切换主题状态 this.theme = this.theme === 'light' ? 'dark' : 'light'; // 保存主题到localStorage(永久有效,除非手动清除) localStorage.setItem('appTheme', this.theme); } } }; </script>
核心说明
  • 使用localStorage.setItem(key, value)存储数据,localStorage.getItem(key)获取数据;
  • 数据永久保存,即使关闭浏览器再重新打开,依然能获取到;
  • 适合存储用户偏好、本地缓存数据等不需要和服务器交互的长期数据。

3. sessionStorage:适合暂存会话级临时数据

sessionStorage的API和localStorage完全一致,但生命周期是会话级,关闭标签页后数据即丢失。

实战代码(多步骤表单暂存)

场景:多步骤表单(如注册表单),用户填写完第一步内容后,切换页面再返回,依然保留已填写的内容(关闭标签页后丢失)。

<template> <div class="form-container"> <h2>多步骤注册表单(步骤1)</h2> <input type="text" v-model="formData.username" placeholder="请输入用户名" class="input" > <input type="tel" v-model="formData.phone" placeholder="请输入手机号" class="input" > <button @click="goToNextStep" class="form-btn">下一步(暂存数据)</button> <p class="tip">提示:关闭当前标签页后,已填写内容将丢失</p> </div> </template> <script> export default { name: 'MultiStepForm', data() { return { // 初始化时从sessionStorage获取暂存的表单数据,无则为空对象 formData: JSON.parse(sessionStorage.getItem('step1Form')) || { username: '', phone: '' } }; }, watch: { // 监听formData变化,实时暂存到sessionStorage formData: { deep: true, // 深度监听对象内部属性变化 handler(newVal) { // sessionStorage只能存储字符串,需将对象转为JSON字符串 sessionStorage.setItem('step1Form', JSON.stringify(newVal)); } } }, methods: { goToNextStep() { if (this.formData.username && this.formData.phone) { // 模拟跳转到下一步表单(实际项目中用路由跳转) alert('已暂存步骤1数据,跳转到步骤2'); // 此处可添加路由跳转代码,如:this.$router.push('/register-step2') } else { alert('请填写完整用户名和手机号!'); } } } }; </script>
核心说明
  • API和localStorage一致,但数据仅在当前标签页有效,关闭标签页或打开新标签页均无法获取;
  • 存储对象时,需用JSON.stringify()转为字符串,获取时用JSON.parse()转回对象;
  • 适合暂存单次会话的临时数据,如多步骤表单、页面临时状态等,无需长期保留的数据。

三、总结:如何选择合适的存储方案?

最后用一张表快速梳理三种方案的Vue使用场景和核心要点,方便实际开发中快速决策:

存储方式Vue中典型使用场景核心要点
Cookie登录状态管理、身份验证(Token)、记住密码用js-cookie库简化操作,可设置过期时间,自动随请求发送
localStorage用户主题偏好、本地缓存数据、长期保存的不敏感信息原生API简洁,永久存储,需手动清除,不发送给服务器
sessionStorage多步骤表单暂存、页面临时状态、单次会话数据API同localStorage,会话级生命周期,关闭标签页即清除
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/31 16:17:28

设备树在ARM64中的内存映射配置实战案例

设备树在ARM64中的内存映射配置实战案例从一个真实问题说起&#xff1a;为什么DMA总是失败&#xff1f;某天&#xff0c;你在调试一块基于飞腾FT-2000/4的嵌入式板卡&#xff0c;系统运行Linux 5.10&#xff0c;任务是实现高清音频回放。驱动写好了&#xff0c;DMA也配置完毕&a…

作者头像 李华
网站建设 2026/4/3 4:07:14

TI电源管理SDK项目应用完整示例

从零构建高可靠电源系统&#xff1a;TI SDK实战全解析你有没有遇到过这样的场景&#xff1f;系统上电瞬间&#xff0c;FPGA莫名其妙锁死&#xff1b;调试音频模块时底噪始终下不去&#xff1b;好不容易跑起来的多核处理器&#xff0c;一加载任务就重启……这些问题&#xff0c;…

作者头像 李华
网站建设 2026/4/2 12:10:18

LangFlow集成Hugging Face模型,拓展更多AI能力

LangFlow集成Hugging Face模型&#xff0c;拓展更多AI能力 在大语言模型&#xff08;LLM&#xff09;席卷各行各业的今天&#xff0c;越来越多团队希望快速构建智能对话系统、自动化内容生成流程或知识问答引擎。然而现实是&#xff1a;即便有了LangChain这样的强大框架&#…

作者头像 李华
网站建设 2026/3/26 11:42:40

LangFlow推荐信模板生成工具实现

LangFlow推荐信模板生成工具实现 在高校教师和企业主管的日常工作中&#xff0c;撰写推荐信是一项高频但耗时的任务。尤其当面对多位学生或候选人、需要提交英文申请材料时&#xff0c;如何在保证专业性和个性化的同时提升效率&#xff0c;成为了一个实际痛点。传统的做法是依赖…

作者头像 李华
网站建设 2026/3/28 5:09:21

快速理解VHDL进程机制:认知型入门篇

从“软件思维”到“硬件思维”&#xff1a;彻底搞懂VHDL中的进程机制你有没有过这样的困惑&#xff1f;在C语言里&#xff0c;写个循环延时很简单&#xff1a;for(int i 0; i < 1000000; i);可当你第一次用VHDL尝试这样做的时候——综合工具要么报错&#xff0c;要么生成一…

作者头像 李华
网站建设 2026/4/1 8:17:52

Java Web 校园失物招领系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着高校规模的不断扩大和师生人数的持续增加&#xff0c;校园内物品遗失现象日益频繁&#xff0c;传统的线下失物招领方式存在效率低、信息传播范围有限等问题。为了解决这一问题&#xff0c;开发一个高效、便捷的校园失物招领系统显得尤为重要。该系统能够实现失物信息的…

作者头像 李华