【前端】理解与使用sessionStorage、localStorage与cookie

ops/2024/9/19 23:27:38/ 标签: 前端

深入理解与高效使用 sessionStorage、localStorage 与 cookie

背景

在构建一个多页面的 Vue web 应用时,我面临了一个关键问题:如何有效地管理用户的登录状态。为了减少对服务器的不必要请求,我尝试了全局状态注入的方法,但这种方法在页面刷新时会导致登录状态丢失,因为异步请求的登录数据还未完全加载,页面就已经进行了登录状态的校验。

查找资料,发现前端得sessionStorage、localStorage 和 cookie技术能够在客户端持久化存储数据,从而在不同页面间共享数据,应该可以解决我的问题。
(这个东西好像很基础,但是作为一个写后端得小白,不知道这些也很正常对吧QAQ)

简单记录一下

Cookie

特点

  1. 有限的存储空间:Cookie 的大小通常限制在 4KB 左右,这意味着它不适合存储大量数据。
  2. 可设置的过期时间:Cookie 可以设置一个特定的过期时间,如果在创建时未指定过期时间,Cookie 通常在浏览器关闭时被删除。
  3. 自动随请求发送:Cookie 会随着 HTTP 请求自动发送到服务器,这可能会增加网络请求的负载,但同时也方便了服务器识别用户。

用途

  1. 用户身份验证:服务器可以通过设置包含用户身份信息的 Cookie,在用户下次访问时识别用户,从而保持登录状态。
  2. 个性化用户设置:存储用户偏好设置,如语言选择、主题风格等,以便在用户再次访问时提供个性化体验。

JavaScript 使用方法

  • 设置 Cookie

    function saveCookie(cookieName, cookieValue, cookieDays) {var d = new Date();d.setTime(d.getTime() + (cookieDays * 24 * 60 * 60 * 1000));var expires = "expires=" + d.toUTCString();document.cookie = cookieName + "=" + cookieValue + ";" + expires + ";path=/";
    }
    
  • 读取 Cookie

    function getCookie(cookieName) {var name = cookieName + "=";var decodedCookie = decodeURIComponent(document.cookie);var ca = decodedCookie.split(';');for(var i = 0; i < ca.length; i++) {var c = ca[i];while (c.charAt(0) == ' ') {c = c.substring(1);}if (c.indexOf(name) == 0) {return c.substring(name.length, c.length);}}return "";
    }
    

localStorage

特点

  1. 较大的存储容量:localStorage 提供了大约 5MB 的存储空间,适合存储更多数据。
  2. 持久性存储:存储在 localStorage 中的数据没有过期时间,会永久保存直到被明确清除。
  3. 仅在客户端存储:数据只存储在客户端,不会随请求发送到服务器,减少了网络开销。

用途

  1. 离线应用支持:在没有网络连接的情况下,可以利用 localStorage 存储的数据来提供基本的应用程序功能。
  2. 缓存不常变化的数据:可以缓存不经常变化的数据,如用户信息、设置选项等,减少服务器请求和加快页面加载速度。

JavaScript 使用方法

  • 存储数据

    localStorage.setItem("username", "JohnDoe");
    
  • 读取数据

    let username = localStorage.getItem("username");
    
  • 删除数据

    localStorage.removeItem("username");
    

sessionStorage

特点

  1. 会话存储容量:与 localStorage 类似,sessionStorage 也提供了大约 5MB 的存储空间。
  2. 会话持久性:sessionStorage 存储的数据只在当前会话中有效,关闭浏览器标签或窗口后数据会被清除。

用途

  1. 表单数据暂存:在用户填写表单过程中,可以使用 sessionStorage 暂存数据,以防页面刷新导致数据丢失。
  2. 页面间临时数据传递:在单次会话中,可以使用 sessionStorage 在不同页面间传递临时数据,如用户在表单中输入的数据。

JavaScript 使用方法

  • 存储数据

    sessionStorage.setItem("sessionKey", "sessionValue");
    
  • 读取数据

    let sessionValue = sessionStorage.getItem("sessionKey");
    
  • 删除数据

    sessionStorage.removeItem("sessionKey");
    

024/08/27


http://www.ppmy.cn/ops/102502.html

相关文章

【通俗理解】深度学习特征提取——Attention机制的数学原理与应用

【通俗理解】深度学习特征提取——Attention机制的数学原理与应用 关键词提炼 #深度学习 #特征提取 #Attention机制 #CNN #Transformer #关联特征 #MLP #拟合处理 第一节&#xff1a;Attention机制的类比与核心概念 1.1 Attention机制的类比 Attention机制可以被视为一个“特…

【kafa系列】kafka如何保证消息不丢失

【kafa系列】kafka如何保证消息不丢失 Apache Kafka通过多种机制来确保消息不丢失&#xff0c;这些机制包括但不限于副本机制、ISR&#xff08;In-Sync Replicas&#xff09;机制、ACK&#xff08;Acknowledgment&#xff09;机制、幂等生产者&#xff08;Idempotent Producer&…

K8S对接Ceph分布式存储

文章目录 一、Ceph理论知识1、Ceph简介2、Ceph分布式存储的优点3、Ceph核心组件 二、部署Ceph高可用集群1、服务器环境信息2、部署前环境准备工作3、部署Ceph监控服务Monitor4、激活Ceph存储服务OSD 三、K8S对接Ceph存储1、K8S对接Ceph RBD实现数据持久化2、基于Ceph RBD生成PV…

计算机视觉编程 1(图片处理)

目录 灰色度 缩略图 拷贝粘贴区域 调整图像尺寸 旋转图像45 画图线、描点 灰色度 灰度是指图像中每个像素的亮度值&#xff0c;用来描述图像中各个像素的明暗程度。在计算机视觉中&#xff0c;灰度可以通过以下方式来计算&#xff1a; 1. 平均值法&#xff1a;将图像中每…

计算机毕业设计推荐-基于python的个性化旅游路线推荐平台

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于python的个性化旅游路线…

ubuntu20 安装ros noetic版本

【ROS】Ubuntu20.04卸载重装ROS_ubuntu20.04卸载ros-CSDN博客 错误处理——rosdep init&#xff0c;rosdep update失败解决方案_rosdep init出错-CSDN博客 ubuntu 20.04解决在处理时有错误发生&#xff1a; /var/cache/apt/archives/python3-catkin-pkg-modules_0.4.24-1_all…

NoSQL数据库-Redis集群详解及案例实现

一、 关系型数据库和 NoSQL 数据库 1.1 数据库主要分为两大类&#xff1a;关系型数据库与 NoSQL 数据库 关系型数据库&#xff0c;是建立在关系模型基础上的数据库&#xff0c;其借助于集合代数等数学概念和方法来处理数据库中的数据主流的 MySQL、Oracle、MS SQL Server 和 D…

基于JAVA的专利资源共享平台

项目介绍 基于JAVA的专利资源共享平台系统是一个集专利信息展示、资源共享、交易服务等功能于一体的综合性平台。该系统利用JAVA语言的强大功能和广泛的生态系统&#xff0c;结合数据库技术、Web开发技术等&#xff0c;为用户提供了一个高效、安全、便捷的专利资源共享和交易环…

【C++】日期和时间

C 提供了多种处理日期和时间的功能&#xff0c;主要通过标准库 <ctime> 和 <chrono> 提供。以下是 C 中处理日期和时间的功能介绍及其用法&#xff1a; 1. <ctime> 库 <ctime> 是 C 中处理时间的传统库&#xff0c;提供了一些基本的时间操作函数。这…

Amazon Bedrock 实践:零基础创建贪吃蛇游戏

本文探讨了如何利用 Amazon Bedrock 和大型语言模型&#xff0c;快速创建经典的贪吃蛇游戏原型代码。重点展示了利用提示工程&#xff0c;将创新想法高效转化为可运行代码方面的过程。文章还介绍了评估和优化提示词质量的最佳实践。 亚马逊云科技开发者社区为开发者们提供全球的…

SD三分钟入门!秋叶大佬24年8月最新的Stable Diffusion整合包V4.9.7来了~

先感谢赛博菩萨秋葉大佬&#xff0c;开发绘世启动器&#xff0c;**8月15日更新了秋叶整合包最新版本4.9。**文末有安装包&#xff01;&#xff01; SD整合包可以扫描下方,免费获取 1 什么是 Stable Diffusion&#xff1f; Stable Diffusion&#xff08;简称SD&#xff09;是…

一键编译QT5源码脚本(交叉编译arm64、mips64版本)

前言 这几天为了编写国产专用机上的软件&#xff0c;又盘起了交叉编译.. 一开始想使用深度最新的deepin 23正式版做系统&#xff0c;搭建编译环境。然而交叉编译链工具直接安装失败&#xff01; 然后又装了Debian12原版系统&#xff0c;编译环境倒是顺利搭建起来&#xff0c…

DDIA 分布式数据的分区与复制 - 基于 Redis、Kafka、Elasticsearch 的深入分析

引言 本文基于《Designing Data-Intensive Applications》一书&#xff08;设计数据密集型应用&#xff0c;简称 DDIA&#xff09;&#xff0c;深入探讨了 Redis、Kafka 和 Elasticsearch 等常用组件的分区与复制机制。通过这些案例分析&#xff0c;我们可以更好地理解分布式系…

Java Web实战教程:如何一步步开发美容美发管理系统

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

Python编码系列—Docker容器的高效使用与实战应用

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

Linux系统(Centos7)没有安装GUI图形界面后期加装方法

问题背景 前期图方便安装了centos7的命令行版本&#xff0c;后期发现需要有图形界面才行&#xff0c;所以需要在后期加装图形界面。 问题解决 必要要求&#xff1a;服务器能够连接互联网&#xff0c;如果是VMware,网络选择NAT&#xff0c;开机后就可以联网&#xff1b;所有操…

《上海包装》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《上海包装》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《上海包装》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;上海世纪出版&#xff08;集团&#xff09;有限公司…

noge-gyp构建项目踩坑记录

开发环境 系统: win11 node: 19.7.0 npm: 8.3.2 node-gyp: 10.0.2可以不使用windows-build-tools来安装构建工具,手动进行安装 我这边用windows-build-tools安装时候会提示 process.env only accepts a configurable, writable, and enumerable data descriptor. 查了资料后…

Autosar工程师必读:Vector工具链自动化实战指南<一>

----自动化不仅是一种技术&#xff0c;更是一种思维方式&#xff0c;它将帮助我们在快节奏的工作环境中保持领先&#xff01; 目录 往期推荐 场景1&#xff1a;代码生成 用法示例 参数说明 场景2&#xff1a;项目更新 用法示例 参数说明 场景3&#xff1a;导出Arxml 用…

【设计模式之原型模式——矩形原型】

原型模式的基本实现 创建⼀个抽象类或接⼝&#xff0c;声明⼀个克隆⽅法 clone 具体原型类去实现接口&#xff0c;重写克隆⽅法 客户端中实例化具体原型类的对象&#xff0c;并调⽤其克隆⽅法来&#xff08;赋给&#xff09;创建新的对象。 什么时候实现原型模式 &#xff1f;…