HTML5 本地存储

news2024/11/19 22:54:30

文章目录

  • HTML5 本地存储
    • Cookie的缺点
    • localStorage
      • 简介
      • 简单使用
    • sessionStorage
      • 简介
      • 简单使用
    • indexedDB
      • 简介

HTML5 本地存储

Cookie的缺点

在HTML4.01中,想要在浏览器端存储用户的某些数据时,我们一般只能使用Cookie来实现。

但是Cookie存在一些问题:

  • 大小限制:大多数浏览器支持最大为4KB的Cookie。
  • 数量限制:大多数浏览器只允许每个站点存储20个Cookie,如果想要存储更多Cookie,则旧的Cookie将会被丢弃。
  • 有些浏览器还会对它们将接收的来自所有站点的Cookie总数做出绝对限制,通常为300个。
  • Cookie默认情况下都会随着HTTP请求发送到后台,但是实际上大多数请求都是不需要Cookie的。

为了解决Cookie这种方式的限制,HTML5新增了3种全新的数据存储方式:localStorage、sessionStorage和indexedDB:

  • localStorage用于永久保存客户端的少量数据。
  • sessionStorage用于临时保存客户端的少量数据。
  • indexedDB用于永久保存客户端的大量数据。

localStorage

简介

在HTML5中,我们可以使用localStorage对象来“永久”保存客户端的少量数据。即使浏览器被关闭了,使用localStorage对象保存的数据也不会丢失,下次打开浏览器访问网站时仍然可以继续使用。

对于localStorage来说,每一个域名可以保存5MB数据,现在绝大多数浏览器都已经支持localStorage。

localStorage对象的常用方法有5种:

方法说明
setItem(key, value)保持数据
getItem(key)获取数据
removeItem(key)删除数据
clear()清空所有数据
key(n)获取第n个值,n为整数

简单使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style>
			table {
				border-collapse: collapse;
			}

			table td {
				width: 100px;
				line-height: 30px;
				border: 1px solid #000;
				text-align: center;
			}
		</style>
		<script>
			function Item(key, value) {
				this.key = key;
				this.value = value;
			}

			var arr = [];

			function setTable() {
				queryLocal();
				var tbody = document.querySelector("tbody");
				var html = "";
				arr.forEach(function(value, index, array) {
					html += `<tr>`;
					html += `<td>${value.key}</td>`;
					html += `<td>${value.value}</td>`;
					html += `<td><button index="${index}">删除</button></td>`;
					html += `</tr>`;
				})
				tbody.innerHTML = html;
				setDelBtn();
			}

			function setDelBtn() {
				var delBtns = document.querySelectorAll("tbody button");
				for (var i = 0; i < delBtns.length; i++) {
					delBtns[i].onclick = function() {
						var index = this.getAttribute("index");
						var delArr = arr.splice(index, 1);
						delArr.forEach(function(value, index, array) {
							deleteLocal(value.key);
						})
						setTable();
					}
				}
			}

			/**
			 * localStorage添加数据
			 */
			function addLocal(key, value) {
				localStorage.setItem(key, value);
			}

			/**
			 * localStorage删除数据
			 */
			function deleteLocal(key) {
				localStorage.removeItem(key);
			}

			/**
			 * localStorage清空数据
			 */
			function clearLocal() {
				localStorage.clear();
			}

			/**
			 * localStorage获取所有数据
			 */
			function queryLocal() {
				arr = [];
				for (var i = 0; i < localStorage.length; i++) {
					var key = localStorage.key(i);
					var value = localStorage.getItem(key);
					arr.push(new Item(key, value));
				}
			}

			window.onload = function() {
				var keyInput = document.getElementById("keyInput");
				var valueInput = document.getElementById("valueInput");
				var addBtn = document.getElementById("addBtn");
				var queryBtn = document.getElementById("queryBtn");
				var clearBtn = document.getElementById("clearBtn");
				var table = document.getElementById("table");

				addBtn.onclick = function() {
					addLocal(keyInput.value, valueInput.value);
					keyInput.value = "";
					valueInput.value = "";
					setTable();
				}
				queryBtn.onclick = function() {
					setTable();
				}
				clearBtn.onclick = function() {
					clearLocal();
					setTable();
				}
			}
		</script>
	</head>
	<body>
		<p><label>key: <input id="keyInput" type="text"></label></p>
		<p><label>value: <input id="valueInput" type="text"></label></p>
		<p>
			<input id="addBtn" type="button" value="增加">
			<input id="queryBtn" type="button" value="查询">
			<input id="clearBtn" type="button" value="清空">
		</p>
		<table id="table">
			<thead>
				<tr>
					<td>key值</td>
					<td>value值</td>
					<td>删除</td>
				</tr>
			</thead>
			<tbody> </tbody>
		</table>
	</body>
</html>

在这里插入图片描述

sessionStorage

简介

在HTML5中,我们可以使用sessionStorage对象来“暂时”保存客户端的少量数据。sessionStorage对象跟localStorage对象非常相似,两者有着完全相同的方法。

方法说明
setItem(key, value)保持数据
getItem(key)获取数据
removeItem(key)删除数据
clear()清空所有数据
key(n)获取第n个值,n为整数

sessionStorage对象跟localStorage对象也有本质上的区别:sessionStorage对象保存的是“临时数据”,用户关闭浏览器后,数据就会丢失;而localStorage对象保存的是“永久数据”,用户关闭浏览器后,数据依然存在。

此外,localStorage和sessionStorage都是window对象下的子对象。也就是说,localStorage.getItem()其实是window.localStorage.getItem()的简写。

简单使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style>
			table {
				border-collapse: collapse;
			}

			table td {
				width: 100px;
				line-height: 30px;
				border: 1px solid #000;
				text-align: center;
			}
		</style>
		<script>
			function Item(key, value) {
				this.key = key;
				this.value = value;
			}

			var arr = [];

			function setTable() {
				queryLocal();
				var tbody = document.querySelector("tbody");
				var html = "";
				arr.forEach(function(value, index, array) {
					html += `<tr>`;
					html += `<td>${value.key}</td>`;
					html += `<td>${value.value}</td>`;
					html += `<td><button index="${index}">删除</button></td>`;
					html += `</tr>`;
				})
				tbody.innerHTML = html;
				setDelBtn();
			}

			function setDelBtn() {
				var delBtns = document.querySelectorAll("tbody button");
				for (var i = 0; i < delBtns.length; i++) {
					delBtns[i].onclick = function() {
						var index = this.getAttribute("index");
						var delArr = arr.splice(index, 1);
						delArr.forEach(function(value, index, array) {
							deleteLocal(value.key);
						})
						setTable();
					}
				}
			}

			/**
			 * sessionStorage添加数据
			 */
			function addLocal(key, value) {
				sessionStorage.setItem(key, value);
			}

			/**
			 * sessionStorage删除数据
			 */
			function deleteLocal(key) {
				sessionStorage.removeItem(key);
			}

			/**
			 * sessionStorage清空数据
			 */
			function clearLocal() {
				sessionStorage.clear();
			}

			/**
			 * sessionStorage获取所有数据
			 */
			function queryLocal() {
				arr = [];
				for (var i = 0; i < sessionStorage.length; i++) {
					var key = sessionStorage.key(i);
					var value = sessionStorage.getItem(key);
					arr.push(new Item(key, value));
				}
			}

			window.onload = function() {
				var keyInput = document.getElementById("keyInput");
				var valueInput = document.getElementById("valueInput");
				var addBtn = document.getElementById("addBtn");
				var queryBtn = document.getElementById("queryBtn");
				var clearBtn = document.getElementById("clearBtn");
				var table = document.getElementById("table");

				addBtn.onclick = function() {
					addLocal(keyInput.value, valueInput.value);
					keyInput.value = "";
					valueInput.value = "";
					setTable();
				}
				queryBtn.onclick = function() {
					setTable();
				}
				clearBtn.onclick = function() {
					clearLocal();
					setTable();
				}
			}
		</script>
	</head>
	<body>
		<p><label>key: <input id="keyInput" type="text"></label></p>
		<p><label>value: <input id="valueInput" type="text"></label></p>
		<p>
			<input id="addBtn" type="button" value="增加">
			<input id="queryBtn" type="button" value="查询">
			<input id="clearBtn" type="button" value="清空">
		</p>
		<table id="table">
			<thead>
				<tr>
					<td>key值</td>
					<td>value值</td>
					<td>删除</td>
				</tr>
			</thead>
			<tbody> </tbody>
		</table>
	</body>
</html>

indexedDB

简介

HTML5新增了一种被称为indexedDB的数据库,该数据库是一种存储在客户端本地的NoSQL数据库,用于在本地存储大量数据。目前主流浏览器的最新版本都对其提供了支持。

indexedDB是一个“对象数据库”,而不是“关系数据库”,它相对于传统的关系数据库(如MySQL、SQL Server等)来说,功能简化了很多,但是已经足够满足实际开发需求了。

特别注意一点,HTML5标准中的Web SQL Database实际上已经被废除,如果小伙伴们在其他地方看到,直接忽略即可。在本地数据库这个技术方向,最新的HTML5标准表示只支持indexedDB。

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

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

相关文章

如何进行企业设备管理?

如何进行企业设备管理&#xff1f; 点进这篇文章&#xff0c;让企业设备管理不再 难 难 难 &#xff01; 对于许多公司来说&#xff0c;特别是制造业&#xff0c;生产设备已成为企业生产线中最重要最核心的部分&#xff0c;因此设备管理是企业管理基础的重要组成部分。而在当…

mysql-基础-约束多表关系多表查询事务

文章目录mysql基础1&#xff0c;约束1.1 概念1.2 分类1.3 非空约束1.4 唯一约束1.5 主键约束1.6 默认约束1.7 约束练习1.8 外键约束1.8.1 概述1.8.2 语法1.8.3 练习2&#xff0c;数据库设计2.1 数据库设计简介2.2 表关系(一对多)2.3 表关系(多对多)2.4 表关系(一对一)2.5 数据库…

刘鹏的2022年度总结

[ 这是 2022 博客之星 的竞选帖子&#xff0c; 请你在这里增加其他内容。接下来分享这一年的收获&#xff0c;感悟&#xff0c;以及 对CSDN 产品的反馈和 2023 年的希望。 ] 目录 1. 学习收获 1.1 心路历程 1.2 基本收支 2. 未来展望 2.1 UR3机械臂ROS 2.2 论文 2.3 开…

电线电缆行业mes解决方案,打造全新信息化车间

电线电缆行业虽然只是一个配套行业&#xff0c;却占据着中国电工行业1/4的产值。它产品种类众多&#xff0c;应用范围十分广泛&#xff0c;涉及到电力、建筑、通信&#xff0c;制造等行业&#xff0c;与国民经济的各个部门都密切相关。电线电续还被称为国民经济的“动脉”与“神…

STM32理论 —— 看门狗

文章目录1. 简述2. 独立看门狗 IWDG2.1 IWDG 相关寄存器2.1.1 键值寄存器IWDG_KR2.1.2 预分频寄存器IWDG_PR与重装载寄存器IWDG_RLR2.2 核心代码1. 简述 STM32 内部自带了 2 个看门狗&#xff1a;独立看门狗&#xff08;IWDG&#xff09;和窗口看门狗&#xff08;WWDG&#xff…

5. 最长回文子串

题目描述 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s “babad” 输出&#xff1a;“bab” 解释&#xff1a;“aba” 同样是符合题意的答案。 示…

Redis集群系列四 —— 哨兵集群搭建

准备实例和配置 搭建一个三节点的 Sentinel 集群&#xff0c;来监管之前的 Redis 主从集群&#xff0c;如图&#xff1a; 参考上述配置&#xff0c;分别复制 redis 下的 sentinel.conf 文件&#xff0c;如图&#xff1a; 文件中除端口外&#xff0c;其它配置都是一样的。 启动…

路由与交换期末复习整理

一、前言 本文是对前期在校内学习路由与交换课程时对相关知识点的整理&#xff0c;供期末复习参考。 二、选择题知识点 1. 启动配置保存的位置 NVRAM 2. 路由器的功能 网络连接功能、&#xff08;数据处理&#xff09;和设备管理功能。 3. 打开路由器接口的命令 int加接口…

骨骼与绑定

文章目录Blender里的三种绑定.主从绑定.进行物体绑定.进行顶点绑定.解除绑定.保持变换.无反向.进行晶格绑定.约束.变换约束.复制位置.复制旋转.复制缩放.限定距离.限定位置&#xff0c;限定旋转&#xff0c;限定缩放.维持体积.变换.追踪约束.钳制到.阻尼追踪.锁定追踪.拉伸到.标…

【Go基础】初识Go语言

文章目录1. 开发环境搭建2. 第一个Go程序3. Go命令介绍1. 开发环境搭建 在 https://studygolang.com/dl 上下载需要的Go稳定版本&#xff0c;这里我选择的是17.5的版本对于Windows和macOS用户&#xff0c;直接双击即可安装&#xff0c;留意一下安装路径&#xff1b;对于Linux用…

loop为true, slidesPerView为多个的时候,swiper精准获取激活的索引

效果图如下&#xff1a; 重点代码如下&#xff1a; <script>var swiper new Swiper(.swiper-container, {slidesPerView: 3, //显示几个slidespaceBetween: 30, //slide之间的间距centeredSlides: true,loop: true, //开启循环滚动initialSlide: 0, //默认就是0p…

多目标跟踪

目录 多目标跟踪定义&#xff1a; 多目标跟踪分类 多目标跟踪难点分析 多目标跟踪数据集 多目标跟踪评价指标 多目标跟踪定义&#xff1a; 多目标跟踪旨在将视频序列中感兴趣的目标检测出来&#xff0c;并赋予每个目标单独的编号&#xff0c;在整个序列中形成目标的轨迹。 …

BindingException异常的产生原因及解决过程详解

一. 问题背景 今天我在讲完MyBatis后&#xff0c;学生在进行代码练习时遇到了下面这样的一个异常&#xff0c;先上图&#xff1a; 二. 问题分析 1.原因分析 首先我们看到&#xff0c;这里抛出的异常是org.apache.ibatis.binding.BindingException&#xff0c;接着再看异常的…

如何提高外贸客户回复率

业务员接到的每一笔订单都是客户对他的信任&#xff0c;所以合作的前提是信任。如何让客户信任我们或者快速信任我们&#xff0c;尤为关键。 如何提高客户的回复率&#xff0c;米贸搜整理如下: 1.及时回复: 无论是客户发来的询盘还是网上咨询&#xff0c;都要尽快回复客户&am…

Uber应用分享 | 使用 Parquet Page Index 加速 Presto 查询

当前&#xff0c;数据量呈快速增长态势&#xff0c;给诸如 Presto 等查询引擎带来了挑战。Presto 作为一种流行的交互式查询引擎&#xff0c;具有可扩展、高性能并可与 Hadoop 进行平滑集成的特性。随着数据量的增长&#xff0c;Presto 需要读取更大的数据块并将其加载到内存中…

CREAL:为什么光场+HOE是AR眼镜未来

利用光场显示技术&#xff0c;CREAL曾展示出可自然变焦的3D显示效果。为了验证该技术在AR和VR场景的应用&#xff0c;该公司分别打造了两款头显原型。头显对于VR来讲比较常见&#xff0c;但对于AR来讲&#xff0c;眼镜形态才是未来的发展方向。因此&#xff0c;为了缩减AR硬件的…

Unity_IL2CPP常见问题分析

Unity 打包il2cpp模式时的常见问题分析 Unity 编辑器模式下是采用.net 虚拟机解释执行.net 代码&#xff0c;发布的时候有两种模式&#xff0c;一种是mono虚拟机模式&#xff0c;一种是il2cpp模式。由于iOS AppStore规定不允许使用虚拟机&#xff0c;所以发布到iOS,Unity采用了…

推出Linux操作系统Inspur KOS,浪潮信息意欲何为?

2020年底&#xff0c;CentOS突然宣布CentOS7、8等系列版本停止维护的时间表&#xff0c;业界为之震动。 一直以来&#xff0c;Linux都是服务器操作系统市场的顶流支柱。CentOS发行版生命周期的突然变动&#xff0c; 不仅促使很多行业用户思考&#xff1a;“CentOS停止维护之后…

第三十三章 数论——组合数详解(2)

一、组合数——卢卡斯定理 1、问题 这道题中&#xff0c;a,ba,ba,b的范围都是很大的&#xff0c;我们就无法直接用到之前所讲解的预处理阶乘的方法。 如果大家没有看过作者写的组合数&#xff08;1&#xff09;的话&#xff0c;建议大家先去看一下&#xff0c;今天所讲的问题…

【小程序】微信小程序获取头像、呢称2013年最新解决方案(已解决)

一、效果 二、wxml代码 <!-- 点击头像获取头像 --> <view style"margin-bottom: 20px;text-align: center;">---- 点击头像获取logo ----</view> <view class"logo"><button style"width: 100px;height:100px;" cla…