浏览器存储技术:localStorage、sessionStorage和cookie的区别
随着互联网技术的不断发展,人们越来越依赖浏览器进行网页浏览和数据处理。浏览器存储技术是Web开发中非常重要的一部分,它可以帮助我们在浏览器端存储数据,而无需将数据传输到服务器。本文将介绍三种常见的浏览器存储技术:localStorage、sessionStorage和cookie,探讨它们的区别以及各自适用的场景。
一、localStorage
localStorage 是 HTML5 标准中新增的一种客户端存储数据的方式。它提供了一个存储在客户端的键值对(key-value)对象,这些数据在关闭浏览器后仍然保留。localStorage 中的数据是按照域名和协议分离的,不同的域名和协议不能共享数据。
使用localStorage存储数据非常简单。我们可以使用setItem方法设置一个键值对,使用getItem方法获取一个键对应的值,使用removeItem方法删除一个键值对,使用clear方法清空所有的键值对。下面是一个使用localStorage的示例:
localStorage.setItem('name', 'Tom');
var name = localStorage.getItem('name');
localStorage.removeItem('name');
localStorage.clear();
localStorage 适用于需要长期存储的数据,例如用户的偏好设置、表单数据等。由于 localStorage 中的数据在关闭浏览器后仍然保留,因此它可以在多个页面之间共享数据。同时,由于 localStorage 中的数据只能通过 JavaScript 访问,因此它比 cookie 更加安全。
二、sessionStorage
sessionStorage 和 localStorage 类似,都是客户端存储数据的方式。它也提供了一个键值对对象,但是与 localStorage 不同的是,sessionStorage 中的数据在关闭浏览器后就会被清除。同时,sessionStorage 中的数据也是按照域名和协议分离的,不同的域名和协议不能共享数据。
使用 sessionStorage 存储数据也非常简单。我们可以使用setItem方法设置一个键值对,使用getItem方法获取一个键对应的值,使用removeItem方法删除一个键值对,使用clear方法清空所有的键值对。下面是一个使用 sessionStorage 的示例:
sessionStorage.setItem('name', 'Tom');
var name = sessionStorage.getItem('name');
sessionStorage.removeItem('name');
sessionStorage.clear();
sessionStorage 适用于临时存储数据,例如用户在填写表单时,需要在多个页面之间保存一些数据,但是不需要在关闭浏览器后保留数据。由于 sessionStorage 中的数据在关闭浏览器后就会被清除,因此它不适合长期存储数据。同时,由于 sessionStorage 中的数据只能通过 JavaScript 访问,因此它比 cookie 更加安全。
三、cookie
cookie 是一种在客户端存储数据的方式,它最早由 Netscape 公司在1994年引入,是目前使用最广泛的浏览器存储技术之一。与 localStorage 和 sessionStorage 不同的是,cookie 中的数据会随着 HTTP 请求一起发送到服务器端,因此它可以在不同的域名和协议之间共享数据。
使用 cookie 存储数据也非常简单。我们可以使用 document.cookie 属性设置一个键值对,使用正则表达式或第三方库来获取一个键对应的值,使用 expire 过期时间和 path 属性来控制 cookie 的有效期和访问路径。下面是一个使用 cookie 的示例:
document.cookie = 'name=Tom; expires=Wed, 09 May 2023 00:00:00 UTC; path=/';
var name = document.cookie.replace(/(?:(?:^|.*;\s*)name\s*\=\s*([^;]*).*$)|^.*$/, "$1");
cookie 适用于需要在不同的域名和协议之间共享数据的场景,例如用户的登录信息、购物车信息等。由于 cookie 中的数据会随着 HTTP 请求一起发送到服务器端,因此它的安全性比 localStorage 和 sessionStorage 低一些。另外,由于 cookie 中的数据可以被其他网站访问和篡改,因此开发人员需要注意在设置 cookie 的时候设置合适的过期时间和访问路径,以保护用户的隐私和安全。
四、localStorage、sessionStorage和cookie的区别
通过上面的介绍,我们可以看出 localStorage、sessionStorage 和 cookie 之间存在一些区别:
-
存储方式不同:localStorage 和 sessionStorage 都是将数据存储在客户端的键值对对象中,而 cookie 是将数据存储在客户端的文本文件中。
-
数据保留时间不同:localStorage 中的数据在关闭浏览器后仍然保留,而 sessionStorage 中的数据在关闭浏览器后就会被清除,cookie 中的数据可以设置过期时间,也可以在浏览器关闭后保留。
-
数据访问范围不同:localStorage 和 sessionStorage 中的数据按照域名和协议分离,不同的域名和协议不能共享数据,而 cookie 中的数据可以在不同的域名和协议之间共享数据。
-
数据大小限制不同:localStorage 和 sessionStorage 的数据大小一般为 5MB 左右,而 cookie 的数据大小限制为 4KB 左右。
-
数据访问方式不同:localStorage 和 sessionStorage 中的数据只能通过 JavaScript 访问,而 cookie 中的数据可以通过 JavaScript 和 HTTP 请求访问。
-
数据安全性不同:localStorage 和 sessionStorage 中的数据只能在客户端被访问,因此比 cookie 更加安全,而 cookie 中的数据可以被其他网站访问和篡改,因此需要注意安全性问题。
六、如何选择合适的浏览器存储技术?
选择合适的浏览器存储技术需要考虑多个因素,包括数据大小、数据访问方式、数据保留时间、数据访问范围和数据安全性等。
如果需要存储较大的数据,建议使用 localStorage 或 sessionStorage,因为它们的数据大小限制比 cookie 大得多。如果需要在不同的域名和协议之间共享数据,可以使用 cookie,但需要注意安全性问题。如果需要在会话期间存储数据,建议使用 sessionStorage,因为它的数据会在浏览器关闭后被清除,不会占用过多的存储空间。
在使用浏览器存储技术的过程中,还需要注意一些细节问题。例如,由于 localStorage 和 sessionStorage 中的数据只能通过 JavaScript 访问,因此需要注意跨域访问的问题;另外,由于 cookie 中的数据可以被其他网站访问和篡改,因此需要注意设置合适的过期时间和访问路径,以保护用户的隐私和安全。
七、总结
浏览器存储技术是 Web 开发中非常重要的一部分,它可以帮助开发人员在客户端存储和获取数据,提高应用程序的性能和用户体验。在使用 localStorage、sessionStorage 和 cookie 的过程中,需要注意数据大小、数据保留时间、数据访问范围和数据安全性等问题,选择合适的存储方式,以满足不同的业务需求。同时,还需要注意浏览器存储技术的兼容性和安全性问题,保护用户的隐私和安全。
在未来的 Web 开发中,浏览器存储技术还将继续发展和完善,提供更加强大和灵活的功能和接口,为开发人员带来更好的开发体验和更高的效率。
相关文章:
浏览器存储技术:localStorage、sessionStorage和cookie的区别
随着互联网技术的不断发展,人们越来越依赖浏览器进行网页浏览和数据处理。浏览器存储技术是Web开发中非常重要的一部分,它可以帮助我们在浏览器端存储数据,而无需将数据传输到服务器。本文将介绍三种常见的浏览器存储技术:localSt…...
MySQL中的内连接和外连接
一、MySQL内连接(INNER JOIN) 内连接,又称为等值连接,是最常见的连接类型。它根据两个(或多个)表中具有相同列值的行来创建一个新的结果表。在内连接中,只有通过连接条件匹配的行才会被包含在结…...
node学习手册
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,使 JavaScript 可以脱离浏览器环境运行在服务端。它提供了一组 API,可以让开发者轻松地进行服务器端编程。 以下是 Node.js 的学习手册: 安装 Node.js 首先,需要在官网…...
Java中的JSP是什么?如何实现JSP
JavaServer Pages(JSP)是一种Java技术,可以用于开发动态Web应用程序。它允许开发人员将Java代码嵌入到HTML页面中,以便生成动态内容。本文将介绍JSP的工作原理,以及如何在Java中实现JSP。 JSP的工作原理 JSP的工作原…...
c++之函数对象和谓词
目录 函数对象: 谓词: 一元谓词函数举例如下 二元谓词举例如下 函数对象和函数的区别 一元谓词的案例 二元函数对象案例 二元谓词案例 函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function obj…...
《Andorid开源》greenDao 数据库orm框架
一 前言:以前没用框架写Andorid的Sqlite的时候就是用SQLiteDatabase ,SQLiteOpenHelper ,SQL语句等一些东西,特别在写SQL语句来进行 数据库操作的时候是一件很繁琐的事情,有时候没有错误提示的,很难找到错误的地方&a…...
Android类似微信聊天页面教程(Kotlin)五——选择发送图片
前提条件 安装并配置好Android Studio Android Studio Electric Eel | 2022.1.1 Patch 2 Build #AI-221.6008.13.2211.9619390, built on February 17, 2023 Runtime version: 11.0.150-b2043.56-9505619 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Windows 11 …...
MongoDB:Win/Linux环境安装及一键部署脚本
1. Win安装 1.1 下载 MongoDB 安装程序 访问 MongoDB 官网,进入下载页面:Download MongoDB Community Server | MongoDB 选择 Windows 平台并下载最新版的 MongoDB 安装程序。 1.2 安装 MongoDB 双击安装程序,按照提示完成 MongoDB 的安装…...
KingbaseES V8R3 集群运维系列 -- failover切换后集群自动恢复
案例说明: KingbaseES V8R3集群默认在触发failover切换后,为保证数据安全,原主库需要通过人工介入后,恢复为新的备库加入到集群。在无人值守的现场环境,需要在触发failover切换后,主库可以自动恢复为新备…...
【Selenium中】——全栈开发——如桃花来
目录索引 查找元素:查找方法:单个元素查找:多个元素查找:*代码演示:* 元素交互操作:清空文字: 推荐的变量名定义名称:执行JavaScript :滚动页面方法:*滚动到底…...
Sarsa增强版之Sarsa-λ依然走迷宫
Sarsa-λ(Sarsa Lambda)是Sarsa算法的一种变体,其中“λ”表示一个介于0和1之间的参数,用于平衡当前状态和之前所有状态的重要性。 Sarsa算法是一种基于Q-learning算法的增量式学习方法,通过在实际环境中不断探索和学…...
生成 Cypher 能力:MOSS VS ChatGLM
生成 Cypher 能力:MOSS VS ChatGLM 生成 Cypher 能力:MOSS VS ChatGLM一、 测试结果二、 测试代码(包含Prompt) Here’s the table of contents: 生成 Cypher 能力:MOSS VS ChatGLM MOSS介绍:MOSS 是复旦大…...
数据库的键和存储
主键:数据库表中对存储数据对象给予以唯一和完整表示的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空。 外键:在一个表中存在另一个表得主键称此为表的外键。 为什么用自增列作为主键? 如果我们定义了主…...
基于AT89C51单片机的并入串出乘法口诀的设计与仿真
点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87779146?spm1001.2014.3001.5503 源码获取 并入串出乘法口诀的设计与仿真系统设计 目录 第一章 概述 3 1.1课题研究及意义 3 1.2课题设计内容 4 第二章系统设计…...
人生在世皆有过错,来一起看看Java中的异常吧!!!
Java中的异常问题详解 一、异常的概念与分类 1.异常概念 概念:Java异常是一个描述在代码段中发生异常的对象,当发生异常情况时,一个代表该异常的对象被创建并且在导致该异常的方法中被抛出,而该方法可以选择自己处理异常或者传…...
linux 测试连接网络和端口 telnet
一、安装telnet 1、检测telnet-server的rpm包是否安装 [rootlocalhost ~]# rpm -qa telnet-server 若无输入内容,则表示没有安装。出于安全考虑telnet-server.rpm是默认没有安装的,而telnet的客户端是标配。即下面的软件是默认安装的。 2、若未安装&…...
一文快速入门体验 Hibernate
前言 Hibernate 是一个优秀的持久层的框架,当然,虽然现在说用得比较多的是 MyBaits,但是我工作中也不得不接触 Hibernate,特别是一些老项目需要你维护的时候。所以,在此写下这篇文章,方便自己回顾…...
【RabbitMQ】SpringAMQP
RabbitMQ 1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应&am…...
错题汇总08
1.如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是 A 一元运算符 B 二元运算符 C 选项A)和选项B)都可能 D 重载错误 运算符重载 1.重载成类的成员函数------>形参数目看起来比该运算符需要的参数个数少1&#x…...
使用urllib库简单入门
使用urllib库简单入门 Python中的urllib库是一个非常强大的工具,它提供了一些模块,如urllib.request、urllib.parse、urllib.error、urllib.robotparser等,可以用来处理URLs和网页数据的获取、发送和处理。 在本文中,我们将介绍…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
