【HTML5高级第一篇】Web存储 - cookie、localStorage、sessionStorage

news2024/11/24 15:34:35

文章目录

    • 一、数据存储
      • 1.1 cookie
        • 1.1.1 概念介绍
        • 1.1.2 存储与获取
        • 1.1.3 方法的封装
        • 1.1.4 总结
      • 1.2 localstorage 与 sessionstorage
        • 1.2.1 概述
        • 1.2.2 操作数据的属性或方法
        • 1.2.3 案例-提交问卷
        • 1.2.4 Web Storage带来的好处
    • 附录:
      • 1. HTML5提供的数据持久化技术(离线存储)
      • 2. 应用缓存(Application Cache

一、数据存储

1.1 cookie

1.1.1 概念介绍

我们在使用网络功能的时候,必定少不了一个协议,那就是HTTP协议。但是由于HTTP协议是无状态的,它在链接之后就会断开,不会记录用户的信息。这时,我们就引入了cookie的概念。

原生JavaScipt案例合集
JavaScript +DOM基础
JavaScript 基础到高级
Canvas游戏开发

Cookie是网站为了辨别用户身份,进行会话跟踪而存储在用户本地终端上的数据。Cookie在HTTP协议之中被默认携带。它有以下的几个特性:

  • 存储的数据只能是字符串格式;
  • 在同一域名下,存储文件的大小一般为4KB,数量为50条;
  • 时效性,在一定时间后,cookie会被销毁,最短的有效期为当浏览器关闭时,cookie就被销毁;
  • 安全性,采用同源策略,即同协议,同域名,同端口,在此条件下,才能进行读取。

接下来,简单介绍一下cookie的操作:

  • cookie要设置name和value;
  • Cookie的domain,即域名,一般情况下使用domain的默认设置;
  • 设置cookie的path;
  • 设置cookie的expires,即cookie的过期时间。

1.1.2 存储与获取

cookie格式: key = value

查看cookie:打开浏览器通过地址栏前面感叹号 或 控制台切换到Application,找到 Cookies 点击即可

设置和读取cookie

//创建或修改cookie
document.cookie = "name = Jack"; 

//创建变量接收读取到的cookie值,并打印
var getCookie = document.cookie;  
console.log(getCookie); 

//通过添加expires设置过期时间	
document.cookie = "name=;expires=Thu, 01 Jan 1970 00:00:00 GMT";

注:1. cookie设置的过期时间是以服务器时间为基准,在浏览器得到服务器的任何HTTP响应头后会将浏览器的时间与服务器同步。

  2. 使用new Date() 获取的本地时间并不准确,与服务器相差很大。本地时间可被客户修改,如果cookie使用本地时间可被人利用实现永久免登陆验4

cookie的使用

添加cookie:document.cookie = “key=value”; // 一次写入一个键值对
document.cookie = 'test1=hello';
document.cookie = 'test2=world';
//在浏览器中查看一下现在的cookie是什么样子   打开控制台 点击application 就能看到cookies
//注意 document.cookie一次只能写入一个 Cookie,而且写入并不是覆盖,而是添加

读取cookie:document.cookie;

document.cookie // "test1=hello; test2=world"
上面代码从document.cookie一次性读出两个 Cookie,它们之间使用 分号空格 分隔。必须手动还原,才能取出每一个 Cookie 的值。

var cookies = document.cookie.split('; ');

for (var i = 0; i < cookies.length; i++) { 
      console.log(cookies[i]);
}
// foo=bar// baz=bar

修改cookie:document.cookie = “key=value”;  // 修改名为key的cookie值

document.cookie = 'test2=hah';
document.cookie // "test1=hello; test2=hah"

上面代码修改了test2对应的值

失效时间:expires ,没有设置失效时间的cookie 在浏览器关闭以后就会自动删除,如果设置了失效时候在未来的时间,就可以让cookie保存的时间长一点
设置失效时间:document.cookie = “key=value;expires=”+ oDate;

var oDate = new Date();
oDate.setDate(oDate.getDate() + 7);
document.cookie = “key=value;expires=”+ oDate;
//上面代码设置cookie的过期时间为7天以后

删除cookie:将cookie值覆盖为空,并将失效时间设置为过去的时间。

var oDate = new Date();
oDate.setDate(oDate.getDate() -7);
document.cookie = “test=;expires=”+ oDate;
//将cookie的过期时间设置为 7天前,test 这个cookie 就获取不到

1.1.3 方法的封装

function setCookie(name,value,n){
	var oDate = new Date();
	oDate.setDate(oDate.getDate()+n);
	document.cookie = name+"="+value+";expires="+oDate;
}

function getCookie(name){
	var str = document.cookie;
	var arr = str.split("; ");
	for(var i = 0; i < arr.length; i++){
		//console.log(arr[i]);
		var newArr = arr[i].split("=");
		if(newArr[0]==name){
			return newArr[1];
		}
	}
}

function removeCookie(name){
	setCookie(name,1,-1);
}

1.1.4 总结

以上种种可以看出,cookie不适合大量数据的存储,因为他们由每个服务器的请求来传递,使得cookie速度很慢而且效率也不高;

在HTML5中,提供了两种在客户端存储数据的新方法:

  • localStorage 没有时间限制的数据存储
  • sessionStorage 针对一个session(会话)的数据存储

这两种数据都不是由每个服务器请求传递的,而是只有在请求时使用数据,它使 在不影响网站性能的情况下存储 大量数据成为可能。

对于不同网站,数据存储于不同的区域,并且一个网站只能访问其自身的数据。

1.2 localstorage 与 sessionstorage

1.2.1 概述

localStorage 永久级别的存储。只要是再次访问这个域名中的任何一个页面,都可以提取到数据。只要浏览器不卸载,数据就会一直存在。当然,我们可以手动删除数据。

sessionStorage 会话级别的存储。仅在当前页面中有效,页面关闭数据销毁,页面之间不可以互相访问。

浏览器中的位置:

在这里插入图片描述

注:1. localStorage 和 sessionStorage在使用上完全相同,也就是它们具有相同的API。不同之处也就是上面所说的

​ 2. 本地存储存储数据的格式 JSON串(key-value形式)

1.2.2 操作数据的属性或方法

H5封装好了localstorage的属性及方法如下:

  • localstorage.length 获取当前存储的键值对数量
  • localstorage.key(n) 获取第n项的键值
  • localstorage.setItem(key,value) 设置对应的键值对
  • localstorage.getItem(key) 获取对应键值的数据
  • localstorage.removeItem(key) 清除某个数据
  • localstorage.clear() 清除存储的所有数据

localStorage 除了通过以上H5封装好的方法进行设置和获取,还可以像普通对象一样用点(.)操作符 或 [] 进行数据的设置和获取

// 以animal名字将json串catStr存储到localStorage中   	  
localStorage.animal = catStr;
localStorage["animal"] = catStr;

在这里插入图片描述

1.2.3 案例-提交问卷

在这里插入图片描述

代码示例

<h1>新型肺炎防治知识试题</h1>
<form>
    <div>
        <h3>Q1:为控制“新型冠状病毒感染的肺炎”疫情的传播、蔓延、医务人员应做到( )</h3>
        <div><input type="radio" name="q1">早发现、早报告、早诊断、早治疗</div>
        <div><input type="radio" name="q1">早发现、早报告、早诊断、早转院、早治疗</div>
        <div><input type="radio" name="q1">早发现、早诊断、早隔离、早治疗</div>
        <div><input type="radio" name="q1">早发现、早报告、早诊断、早治疗</div>
    </div>
    <div>
        <h3>Q2:为控制“新型冠状病毒感染的肺炎”疫情的传播、蔓延、医务人员应做到( )</h3>
        <div><input type="radio" name="q2">早发现、早报告、早诊断、早治疗</div>
        <div><input type="radio" name="q2">早发现、早报告、早诊断、早转院、早治疗</div>
        <div><input type="radio" name="q2">早发现、早诊断、早隔离、早治疗</div>
        <div><input type="radio" name="q2">早发现、早报告、早诊断、早治疗</div>
    </div>
    <div>
        <h3>Q3:为控制“新型冠状病毒感染的肺炎”疫情的传播、蔓延、医务人员应做到( )</h3>
        <div><input type="radio" name="q3">早发现、早报告、早诊断、早治疗</div>
        <div><input type="radio" name="q3">早发现、早报告、早诊断、早转院、早治疗</div>
        <div><input type="radio" name="q3">早发现、早诊断、早隔离、早治疗</div>
        <div><input type="radio" name="q3">早发现、早报告、早诊断、早治疗</div>
    </div>
    <div>
        <h3>Q4:为控制“新型冠状病毒感染的肺炎”疫情的传播、蔓延、医务人员应做到( )</h3>
        <div><input type="radio" name="q4">早发现、早报告、早诊断、早治疗</div>
        <div><input type="radio" name="q4">早发现、早报告、早诊断、早转院、早治疗</div>
        <div><input type="radio" name="q4">早发现、早诊断、早隔离、早治疗</div>
        <div><input type="radio" name="q4">早发现、早报告、早诊断、早治疗</div>
    </div>
    <div>
        <h3>Q5:为控制“新型冠状病毒感染的肺炎”疫情的传播、蔓延、医务人员应做到( )</h3>
        <div><input type="radio" name="q5">早发现、早报告、早诊断、早治疗</div>
        <div><input type="radio" name="q5">早发现、早报告、早诊断、早转院、早治疗</div>
        <div><input type="radio" name="q5">早发现、早诊断、早隔离、早治疗</div>
        <div><input type="radio" name="q5">早发现、早报告、早诊断、早治疗</div>
    </div>
    <input type="submit" value="提交">
</form>
<script>
    var form = document.querySelector("form");

    form.onsubmit = function(){
        if(localStorage.submit){
            alert("不能重复提交");
        }else{
            localStorage.submit = true;
            alert("表单成功提交...")
        }
    }
</script>

1.2.4 Web Storage带来的好处

  • 减少网络流量:一旦数据保存在本地后,就可以避免再向服务器请求数据,因此减少不必要的数据请求,减少数据在浏览器和服务器间不必要地来回传递。

  • 快速显示数据:性能好,从本地读数据比通过网络从服务器获得数据快得多,本地数据可以即时获得。再加上网页本身也可以有缓存,因此整个页面和数据都在本地的话,可以立即显示。

  • 临时存储:很多时候数据只需要在用户浏览一组页面期间使用,关闭窗口后数据就可以丢弃了,这种情况使用sessionStorage非常方便。

附录:

1. HTML5提供的数据持久化技术(离线存储)

  • Application Cache:本地缓存应用所需的文件(保存应用本身不保存数据)
  • LocalStorage 和 SessionStorage 以键值对(JSON串)格式存储数据
  • Web SQL 关系数据库,通过SQL语句访问
  • IndexDB 索引数据库

2. 应用缓存(Application Cache

  • 案例链接:http:// m.ftchinese.com/phone.html
  • 应用技术:Application Cache、LocalStorage、Web SQL
  • 应用缓存(Application Cache)关键:Manifest文件(应用所需要的文件清单)
  • 应用缓存特点:Manifest文件有变化才更新,一次必须更新Manifest中所有文件下次才生效(更新不及时)

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

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

相关文章

无代码集成铱云(易订货)连接更多应用

场景描述&#xff1a; 基于铱云开放API能力&#xff0c;无代码集成铱云连接多个应用&#xff0c;实现客户管理、电商数智化、供应链生态管理等。通过Aboter搭建业务自动化流程&#xff0c;实现多个应用的数据集成。 接口能力&#xff1a; 基础数据客户接口商品接口订单接口退…

ASP.NET Core IOC容器

//IOC容器支持依赖注入{ServiceCollection serviceDescriptors new ServiceCollection();serviceDescriptors.AddTransient<IMicrophone, Microphone>();serviceDescriptors.AddTransient<IPower, Power>();serviceDescriptors.AddTransient<IHeadphone, Headp…

量化自定义PyTorch模型入门教程

在以前Pytorch只有一种量化的方法&#xff0c;叫做“eager mode qunatization”&#xff0c;在量化我们自定定义模型时经常会产生奇怪的错误&#xff0c;并且很难解决。但是最近&#xff0c;PyTorch发布了一种称为“fx-graph-mode-qunatization”的方方法。在本文中我们将研究这…

【JAVA】多态

作者主页&#xff1a;paper jie_的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和…

【Sentinel】ProcessorSlotChain处理器插槽链与Node

文章目录 1、Sentinel的基本概念2、ProcessorSlotChain3、Node 1、Sentinel的基本概念 Sentinel实现限流、隔离、降级、熔断等功能&#xff0c;本质要做的就是两件事情&#xff1a; 统计数据&#xff1a;统计某个资源的访问数据&#xff08;QPS、RT等信息&#xff09;规则判断…

FPGA输出lvds信号点亮液晶屏

1 概述 该方案用于生成RGB信号&#xff0c;通过lvds接口驱动逻辑输出&#xff0c;点亮并驱动BP101WX-206液晶屏幕。 参考&#xff1a;下面为参考文章&#xff0c;内容非常详细。Xilinx LVDS Output——原语调用_vivado原语_ShareWow丶的博客http://t.csdn.cn/Zy37p 2 功能描述 …

从零开始学习 Java:简单易懂的入门指南之Collection集合及list集合(二十一)

Collection集合及list集合 1.Collection集合1.1数组和集合的区别1.2集合类体系结构1.3Collection 集合概述和使用1.4Collection集合的遍历1.4.1 迭代器遍历1.4.2 增强for1.4.3 lambda表达式 2.List集合2.1List集合的概述和特点2.2List集合的特有方法2.3List集合的五种遍历方式2…

JS动态计算自动滚动距离

先上效果 具体实现代码&#xff08;如果用到vue项目中的css要取消scoped否则不生效&#xff09; 在这里插入代码片<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible"…

基于STM32的厨房环境监测系统

前言 本篇文章将之前所有的文章进行整合&#xff0c;是之前几篇文章的综合版。 MQ-2烟雾传感器模块功能实现&#xff08;STM32&#xff09; MQ-7一氧化碳传感器模块功能实现&#xff08;STM32&#xff09; dht11温湿度模块功能实现&#xff08;STM32&#xff09; 0…

返回序列中最大值第一次出现时对应的索引(位置)Series.idxmax()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 返回序列中最大值第一次 出现时对应的索引(位置) Series.idxmax() [太阳]选择题 以下说法错误的是? import pandas as pd apd.Series(data[1,6,None,5,6], index[A,B,C,D,E]) print(【显示】…

Spring MVC:域对象共享数据

Spring MVC 前言域对象共享数据使用 ModelAndView 向 request 域对象中共享数据使用 Map 、Model 或 ModelMap 向 request 域对象中共享数据使用 SesionAttributes 注解向 session 域对象中共享数据使用 Servlet API 向 application 域对象中共享数据 附 前言 在上一章中&…

发收一体的2.4G射频合封芯片Y62G,内置九齐MCU

宇凡微2.4GHz发收一体合封芯片Y62G是一款高度集成的系统芯片&#xff0c;融合了2.4G芯片G350和微控制器&#xff08;MCU&#xff09;功能&#xff0c;为开发人员提供了更好的设计自由度和成本效益的解决方案。以下是Y62G芯片的主要特点和优势&#xff1a; 高度合封集成 Y62G芯…

细说GNSS模拟器的RTK功能(二)应用实例01 — 硬件和软件设置

在之前的文章中&#xff0c;我们介绍了什么是RTK&#xff0c;接下来我们将为大家展示RTK使用实例&#xff0c;可以通过两种不同的方法来模拟RTCM的使用&#xff0c;一种是基于RTCM插件&#xff0c;另一种是基于多实例来模拟两个同步的射频信号。 RTK插件方法可以帮助没有基础接…

iOS系统下轻松构建自动化数据收集流程

在当今信息爆炸的时代&#xff0c;我们经常需要从各种渠道获取大量的数据。然而&#xff0c;手动收集这些数据不仅耗费时间和精力&#xff0c;还容易出错。幸运的是&#xff0c;在现代科技发展中有两个强大工具可以帮助我们解决这一问题——Python编程语言和iOS设备上预装的Sho…

RPC框架

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

将虚拟机网络适配器改为仅主机模式,Vmware弹出“仅主机模式适配器驱动程序似乎未运行

这个问题的原因是&#xff0c;主机上缺乏VMware安装后没有VMnet1和VMnet8网卡。 所以

2023年超爆火的15款AI设计软件

随着人工智能技术的快速发展&#xff0c;数字插画之外的“泛设计”行业的从业者也开始在AI中逐渐受益。可能很多设计师还停留在“AI设计软件只能做一些动漫风格插画”的认知中&#xff0c;实际上受到行业需求提升的刺激&#xff0c;软件厂商已经开始积极研究并发布更多针对特定…

uni——input的提示语(placeholder)修改样式等

案例说明 操控input的提示语 案例代码 <template><view><view><input type"text" placeholder"请输入内容" :placeholder-class"isDialogHidden?redColor:" /><button click"hideDialog">按钮</…

正中优配:股票k线图入门?

随着股票市场的不断发展&#xff0c;对股民们来说&#xff0c;了解股票行情变得越来越重要。而股票k线图能够帮助股民们更好地调查和剖析股票行情。但关于一些没有相关经历的新手来说&#xff0c;股票k线图可能会带来一些困惑。那么&#xff0c;股票k线图入门应该从哪些方面着手…

蓝牙资讯|2023Q2全球TWS耳机出货量同比增长15%

TechInsights 报告指出&#xff0c;2023 年二季度全球 TWS 耳机出货量同比增长 15%&#xff0c;收益同比增长 5.1%。 苹果仍以 17% 出货量份额和 43% 的收益份额主导 TWS 市场&#xff0c;但来自印度和中国厂商的竞争&#xff0c;使苹果的份额有所下降。 在收益方面&#x…