JS三种常见的存储机制

news2024/11/15 15:40:37

1.localStorage

localStorage是HTML5引入的一种持久化存储机制,用于在浏览器中长期保存数据。localStorage中存储的数据没有过期时间,除非被显式清除或代码删除。存储在localStorage中的数据对于同一个域名下的所有页面都是共享的。localStorage可以存储较大量级的数据(通常约为5MB)。

在JavaScript中,可以使用localStorage.setItem(key, value)来设置数据,localStorage.getItem(key)来获取数据,以及localStorage.removeItem(key)来移除数据。

// 设置数据
localStorage.setItem('name', 'John');

// 获取数据
const name = localStorage.getItem('name');

// 移除数据
localStorage.removeItem('name');

2.sessionStorage 

sessionStorage也是HTML5提供的一种客户端存储机制。sessionStorage用于在浏览器会话期间(即浏览器窗口关闭之前)保存数据。存储在sessionStorage中的数据只能通过相同的源(同一域名、协议和端口)访问。sessionStorage在页面刷新时保持不变,但在新标签页或窗口中打开相同网站时会创建一个新的sessionStorage。

与localStorage类似,可以使用sessionStorage.setItem(key, value)、sessionStorage.getItem(key)和sessionStorage.removeItem(key)方法来操作数据。

// 设置数据
sessionStorage.setItem('name', 'John');

// 获取数据
const name = sessionStorage.getItem('name');

// 移除数据
sessionStorage.removeItem('name');

3.Cookie 

Cookie是由服务器发送到浏览器并存储在客户端的小型数据文件。它们用于在浏览器之间进行会话跟踪和存储少量数据。每个Cookie都有一个过期时间,可以手动设置或由服务器指定。存储在Cookie中的数据会在每次请求时通过HTTP头部发送到服务器。Cookie的大小通常受到限制(通常为4KB)。

在JavaScript中,可以使用document.cookie属性进行读取和修改Cookie。

// 设置Cookie
document.cookie = 'name=John; expires=Thu, 18 Dec 2022 12:00:00 UTC; path=/';

// 获取Cookie
const cookies = document.cookie.split(';');
const name = cookies.find(c => c.trim().startsWith('name=')).split('=')[1];

// 移除Cookie
document.cookie = 'name=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';

4.补充 

 1.安全性:
localSiorae和lsessionSiorage存储在刘览器中,如果被恶意攻击者利用)SS攻击等手段获取到其中的数据,则可能会造成隐私泄露等安全问题。因此,在使用localStorage和sessonStorage时,需要注意防范这些攻击。
Cokie在存储时可以设置HtpOnly属性,使得JavaScipt无法访问其中的数据,从而增强了安全性。但是,Cokie的发送机制可能会受到CSRF攻击的影响,因此也需要注意安全问题。

2.数据类型:
localStorage和sessionStorage只能存储字符串类型的数据,如果需要存储其他类型的数据,需要进行序列化和反序列化操作。
Cookie可以存储各种类型的数据,但是需要进行URL编码和解码操作。

3.存储容量:
不同浏览器对于localStorage和sessionStorage的存储容量限制可能不同,需要根据实际情况进行测试。
Cookie的存储容量通常为4KB左右,如果需要存储大量数据,可以考虑使用localStorage或sessionStorage。

5.总结

localStorage和sessionStorage是HTML5提供的两种客户端存储机制,localStorage用于长期保存数据,而sessionStorage用于会话期间的临时存储。Cookie也可以用于在浏览器中存储数据,并且具有过期时间和在每次请求时发送到服务器的特性。localStorage和sessionStorage在同一域名下共享数据,而Cookie在所有页面之间共享。localStorage和sessionStorage可以通过JavaScript的API进行操作,而Cookie需要通过document.cookie属性进行操作。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1134010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

香港优才计划线上申请官网入口地址在此,附自己申请攻略!

香港优才计划线上申请官网入口地址在此,附自己申请攻略! 2023年4月份开始,香港入境处调整了优才计划申请方式。申请人须使用电子化服务递交有关申请,也就是线上申请!入境处不再接受亲身递交、以邮递或投递方式递交的有…

腾讯云抱歉不满足产品首购条件解决方法

购买腾讯云服务器提示“抱歉,检测到相同实名认证主体已购买,不满足产品首购条件,您可了解其他商品。”,购买腾讯云特价云服务器是有新用户首购限制的,说当前腾讯云认证主体的其他账号已经购买过云服务器,一…

WAS项目更新单个文件

WAS项目更新单个文件 websphere替换单个文件时,相对路径是ear目录作为根路径 ‍ ‍ 比如要替换zjyct_testgkjz.jsp,路径只要填写BocGkjzWeb.war/zjyct_testgkjz.jsp,如果填写绝对路径,将造成如上图find出来的第一条所示结果问题 ‍

什么是有效种草!900万播放成B站“网红品牌”

- 导语 众所周知,B站早期是二次元小众社区,所以ACG(动画、漫画、游戏三者的合称)内容一直是B站的核心品类,B站经过多品类内容的摸索和发展,一直到现在成为年轻一代聚集的多元化社区,但ACG内容仍…

C++宏的作用

四种预编译命令:头文件包含&#xff0c;条件编译&#xff0c;宏替换和布局控制。 1.头文件包含 #include 文件分别用两种形式包含&#xff0c;一种将文件用“”包含&#xff0c;另一种用<>包含。 两种包含方式的不同之处在于&#xff0c;它们的查找策略不同。 #incl…

【递归、搜索与回溯算法】第五节.129. 求根节点到叶节点数字之和和814. 二叉树剪枝

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;递归、搜索与回溯算法 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&am…

基于Java的医药进销存管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

CMake 坑之添加文件后不修改CMakeList.txt,则文件加不进来

问题&#xff1a; 我在一个文件夹中加了一个.h和对应的cpp。 这里.h中的类会被导出。 但是怎么都导不出来。 我试了无数次的 clean and rebuild 都没用。 分析&#xff1a; 做了很多实验。发现是新建的文件没有被读取进来。 解决方法&#xff1a; 改进了下对应的CMakeL…

嵌入式软件工程师面试题——2025校招专题(三)

说明&#xff1a; 面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但在这里博主希望每一个题目&#xff0c;大家都要…

Ubuntu 安装 docker-compose

在Ubuntu上安装Docker Compose&#xff0c;可以按照以下步骤进行操作&#xff1a; 下载 Docker Compose 二进制文件 sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker…

【static + 代码块+toString打印对象】

文章目录 static成员static修饰成员变量static成员变量初始化代码块 对象的打印写show方法打印对象调用toString打印对象 总结 static成员 举例&#xff1a;一个班的学生&#xff0c;在实例化每个人的名字&#xff0c;年龄&#xff0c;学号等学员信息时都不一样&#xff0c;但…

Redis单线程还是多线程?

&#x1f603; 个人学习笔记&#xff0c;不喜勿喷&#xff0c;望大佬指正&#xff01; 目录 一、Redis为什么选择单线程1. 是什么&#xff1f;2. why&#xff0c;为什么之前选择单线程&#xff1f;3. 作者原话使用单线程原因&#xff0c;官网证据 二、 为什么逐渐加入多线程特性…

网络安全,下一个十年饭碗稳了!

“战役”阶段&#xff0c;多个行业线下转为线上求生&#xff0c;云买菜、云蹦迪、云相亲、云聚会悄然兴起&#xff0c;未来属于云时代似乎成为互联网的共识&#xff0c;而与互联网息息相关的网络安全领域&#xff0c;已经站上了了蓬勃发展的“风口” 如今&#xff0c;网络安全前…

如何用Postman做接口自动化测试?一文5个步骤带你成功实现!

什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试&#xff0c;模拟人去操作软件界面&#xff0c;把人从简单重复的劳动中解放出来 本质是用代码去测试另一段代码&#xff0c;属于一种软件开发工作&#xff0c;已经开发完成的用例…

Python超入门(6)__迅速上手操作掌握Python

# 26.函数和参数 # 注意&#xff1a;有参函数和无参函数的名字要不同 def user(): # 无参函数print("hello world!")def user1(my_id): # 有参函数print(my_id)def user2(first_name, last_name): # 有参函数print(fMy name is {first_name} {last_name})print(&…

商超便利店经营小程序商城的作用是什么

店铺流量越来越低&#xff0c;线上平台入驻费用也不低&#xff0c;营销方式单一&#xff0c;店铺内经营数据无法统计&#xff0c;客户进店难&#xff0c;消费难&#xff0c;复购更难&#xff0c;越来越多的商超便利商家开始通过数字化商城解决问题。 通过【雨科】平台搭建商超便…

HackTheBox - Starting Point -- Tier 0 --- Dancing

文章目录 一 题目二 实验过程 一 题目 Tags Network、Protocols、SMB、Reconnaissance、Anonymous/Guest Access译文&#xff1a;网络、协议、SMB、侦察、匿名/访客访问Connect To attack the target machine, you must be on the same network.Connect to the Starting Poi…

基于springboot实现篮球竞赛预约平台管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现篮球竞赛预约平台管理系统演示 摘要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;篮球竞赛预约平台也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&…

统计学习方法 支持向量机(下)

文章目录 统计学习方法 支持向量机&#xff08;下&#xff09;非线性支持向量机与和核函数核技巧正定核常用核函数非线性 SVM 序列最小最优化算法两个变量二次规划的求解方法变量的选择方法SMO 算法 统计学习方法 支持向量机&#xff08;下&#xff09; 学习李航的《统计学习方…

SpringBoot 源码分析(二) 自动装配过程分析

一、自动装配原理前置知识 自动装配就是自动将bean装载到Ioc容器中。实际上在spring 3.x版本中&#xff0c;Enable模块驱动注解的出现&#xff0c;已经有了一定的自动装配的雏形&#xff0c;而真正能够实现这一机制&#xff0c;还是在spirng 4.x版本中&#xff0c;conditional条…