H5本地储存Web Storage

简介:
 
  一、本地存储由来的背景

由于HTML4时代Cookie的大小、格式、存储数据格式等限制,网站应用如果想在浏览器端存储用户的部分信息,那么只能借助于Cookie。但是Cookie的这些限制,也就导致了Cookie只能存储一些ID之类的标识符等简单的数据。

下面是Cookie的限制:

大多数浏览器支持最大为 4096 字节的 Cookie。

浏览器还限制站点可以在用户计算机上存储的 Cookie 的数量。大多数浏览器只允许每个站点存储 20 个Cookie;如果试图存储更多 Cookie,则最旧的 Cookie 便会被丢弃。

有些浏览器还会对它们将接受的来自所有站点的 Cookie 总数作出绝对限制,通常为 300 个。

Cookie默认情况都会随着Http请求发送到后台服务器,但并不是所有请求都需要Cookie的,比如:js、css、图片等请求则不需要Cookie。

为了破解Cookie的一系列限制,HTML5通过JS的新的API就能直接存储大量的数据到客户端浏览器,而且支持复杂的本地数据库,让JS更有效率。 HTML5支持两种的WebStorage:

永久性的本地存储(localStorage)

会话级别的本地存储(sessionStorage)

二、本地存储的分类

H5本地存储有两个API,一个是Web Storage,还有一个是Web SQL。不管是哪一个,都是基于JavaScript语言来使用,接下来我就教你怎么使用Web Storage

三、Web Storage

HTML5 定义了本地存储规范 Web Storage , 提供了两种存储类型 API: sessionStorage 和 localStorage,二者的差异主要是数据的保存时长及数据的共享方式。

1.localStorage 一直存储在本地,数据存储是永久的,除非用户或程序对其进行删除操作;localStorage 对象存储的数据没有时间限制。第二天、第二周或下一年之后,数据依然可用。

特点:① 域内安全、永久保存。即客户端或浏览器中来自同一域名的所有页面都可访问localStorage数据且数据除了删除否则永久保存,但客户端或浏览器之间的数据相互独立。

② 数据不会随着Http请求发送到后台服务器;

③ 存储数据的大小机会不用考虑,因为在HTML5的标准中要求浏览器至少要支持到4MB。

看一个例子:

代码如下:

 
  1. function clickCounter(){ 
  2.             if(typeof(Storage)!=="undefined"){ 
  3.                 if(localStorage.clickcount){ 
  4.                     localStorage.clickcount=Number(localStorage.clickcount)+1; 
  5.                 }else
  6.                     localStorage.clickcount=1; 
  7.                 } 
  8.                 document.getElementById("result").innerHTML=" 你已经点击了按钮 " + localStorage.clickcount + " 次 "
  9.             }else
  10.                 document.getElementById("result").innerHTML="对不起,您的浏览器不支持 web 存储。"
  11.             } 
  12.         } 
  13.          
  14.          
  15.          
  16.          
  17.     </script> 
  18.      
  19.     <p><button onclick="clickCounter()" type="button">点我!</button></p> 
  20.      
  21.     <div id="result"></div> 
  22.     <p>点击该按钮查看计数器的增加。</p> 
  23.     <p>关闭浏览器选项卡(或窗口),重新打开此页面,计数器将继续计数(不是重置)。</p> 

2.sessionStorage在会话期内有效,数据在浏览器关闭后自动删除;

特点:会话控制、短期保存。会话概念与服务器端的session概念相似,短期保存指窗口或浏览器或客户端关闭后自动消除数据。

兼容性

注意:IE9 localStorage不支持本地文件,需要将项目署到服务器,才可以支持!

目前所有主流的浏览器都在一定程度上支持 HTML5 的 Web Storage特性。 由上图可以看出,基本上所有现代浏览器都已经支持 Web Storage。

Android平台和 IOS 平台各自的浏览器都基本上支持 Web Storage 本地存储特性。 目前市场上的移动设备, 除了 android 手机和 iphone 手机外,越来越多的平板电脑面世,而且基本上依赖着两种平台。在移动端使用 Web Storage 我们几乎不需要考虑浏览器是否支持, 当然从代码的严谨来说,建议最好在使用前先检查浏览器是否支持

下面是检测方式:

 
  1. if (window.localStorage) { 
  2.                 // 浏览器支持 localStorage 
  3.             }else
  4.                 // 不支持 
  5.      
  6.             } 
  7.              
  8.             if (window.sessionStorage) { 
  9.                 // 浏览器支持 sessionStorage 
  10.             }else
  11.                 // 不支持 
  12.             }      

三、localStorage

HTML5 的本地存储 API 中的 localStorage 与 sessionStorage 在使用方法上是相同的,区别在于 sessionStorage 在关闭页面后即被清空,而 localStorage 则会一直保存。我们这里以 localStorage 为例,简要介绍下 html5 的本地存储,并针对如遍历等常见问题作一些示例说明。 localStorage 是 Html5 本地存储的 API,使用键值对的方式进行存取数据,存取的数据只能是字符串。不同浏览器对该 API 支持情况有所差异,如使用方法、最大存储空间等。

存储方式:以键值对(Key-Value)的方式存储字符串。

主要应用:购物车、客户登录、游戏存档。。。

可储存的数据类型:数组,图片,json,样式,脚本。。。(只要是能序列化成字符串的内容都可以存储)

储存地址:C:\Users\15014\AppData\Local\Google\Chrome\User Data\Default\Local Storage(不同电脑不一样,需要打开隐藏文件显示,但是在C盘搜索localStorage就能搜出这个文件夹。)

localStorage提供了四个方法来辅助我们进行对本地存储做相关操作。

(1)localStorage.setItem(键名,键值)在本地客户端存储一个字符串类型的数据,其中,第一个参数“键名”代表了该数据的标识符,而第二个参数“键值”为该数据本身。如:

 
  1. localStorage.setItem("name""张三");      //存储键名为name和键值为"张三"的数据到本地 
  2.         localStorage.setItem("age""28");        //存储键名为age和键值为"28"的数据到本地 

(2)localStorage.getItem(键名) 读取已存储在本地的数据,通过键名作为参数读取出对应键名的数据。如:

 
  1. var data = localStorage.getItem("name"); 
  2.   alert(data);//张三 

(3)localStorage.removeItem(键名)移除已存储在本地的数据,通过键名作为参数删除对应键名的数据。如:

 
  1. var data2 = localStorage.removeItem("name");//从本地存储中移除键名为name的数据 
  2.     alert(data2); //undefined 

(4)localStorage.clear() 移除本地存储所有数据。如:

 
  1. localStorage.clear() 移除本地存储所有数据。如: 
  2.    localStorage.clear();      //保存着的"age/28""name/张三"的键/值对也被移除了,所有本地数据拜拜 

(5)另外,sessionStorage中的四个函数与以上localStorage类的函数用法基本一致,就不再详解。

下面是一个小实例:

 
  1. <script type="text/javascript">   
  2.    
  3.             localStorage.setItem("name""张三");   
  4.             localStorage.setItem("age""28");   
  5.            
  6.             verify();   //验证本地存储   
  7.             localStorage.removeItem("name");   
  8.             verify();   //验证name是否存在   
  9.             localStorage.clear();   
  10.             verify();   //验证name和age是否存在   
  11.            
  12.             //自定义验证函数,验证name和age的数据是否存在   
  13.             function verify(){   
  14.                 var type = localStorage.getItem("name");   
  15.                 var price = localStorage.getItem("age");   
  16.                 type = type ? type : '不存在';   
  17.                 price = price ? price : '不存在';   
  18.            
  19.                 alert( "name: " + type + "\n\n" + "age: " + price );   
  20.             }   
  21.                  
  22.         </script>   

三、localStorage过期策略

由于html5没有给本地存储设置过期策略,那么在处理数据的过期策略的时候可以编写自己过期策略程序,如下:

 
  1. <!DOCTYPE> 
  2. <head> 
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  4. <meta http-equiv="Access-Control-Allow-Origin" content="anonymous"
  5. <title>locstorage 过期策略</title> 
  6. </head> 
  7. <body> 
  8. </body> 
  9. </html> 
  10. <script> 
  11. function set(key,value){ 
  12.  var curtime = new Date().getTime();//获取当前时间 
  13.  localStorage.setItem(key,JSON.stringify({val:value,time:curtime}));//转换成json字符串序列 
  14.  /* 
  15.   说明: 
  16.   JSON.parse用于从一个字符串中解析出json对象,如 
  17.   var str = '{"name":"huangxiaojian","age":"23"}' 
  18.   结果: 
  19.   JSON.parse(str) 
  20.   Object 
  21.     age: "23" 
  22.     name"huangxiaojian" 
  23.     __proto__: Object 
  24.   注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常。 
  25.   JSON.stringify()用于从一个对象解析出字符串,如 
  26.   var a = {a:1,b:2} 
  27.   结果: 
  28.   JSON.stringify(a) 
  29.   "{"a":1,"b":2}" 
  30.  */ 
  31. function get(key,exp)//exp是设置的过期时间 
  32.   var val = localStorage.getItem(key);//获取存储的元素 
  33.   var dataobj = JSON.parse(val);//解析出json对象 
  34. if(new Date().getTime() - dataobj.time > exp)//如果当前时间-减去存储的元素在创建时候设置的时间 > 过期时间 
  35.   console.log("expires");//提示过期 
  36. else
  37.   console.log("val="+dataobj.val); 
  38. </script> 

使用操作如下图所示:

 
 
作者:遍地牛烟
来源:51CTO
目录
相关文章
|
3月前
|
存储 移动开发 JSON
H5学习之路之Web存储解决方案
H5学习之路之Web存储解决方案
14 0
|
3月前
|
移动开发 小程序 JavaScript
Uniapp 中,能够同时兼容H5、web、app、微信小程序的引入高德地图的语法格式
Uniapp 中,能够同时兼容H5、web、app、微信小程序的引入高德地图的语法格式
|
4月前
|
移动开发 小程序
微信小程序web-view嵌入uni-app H5页面,通过H5页面传参给小程序进行转发分享页面,并通过点击转发出来的卡片,定向打开对应H5路径
微信小程序web-view嵌入uni-app H5页面,通过H5页面传参给小程序进行转发分享页面,并通过点击转发出来的卡片,定向打开对应H5路径
|
4月前
|
移动开发 JavaScript
Vant简单H5 web app【小试牛刀】
Vant简单H5 web app【小试牛刀】
|
7月前
|
存储 移动开发 前端开发
H5技术:探索现代Web开发的未来
HTML5(H5)是一种用于构建现代Web应用程序的标准,它为开发者提供了更多的功能和能力。这篇博客将介绍H5技术的一些重要特性以及它们对Web开发的影响。
94 0
|
9月前
|
移动开发 JavaScript
vue如何实现web端与h5端整合在一起
vue如何实现web端与h5端整合在一起
|
存储 移动开发 JSON
【前端】【H5 API】Web存储 Web Storage
【前端】【H5 API】Web存储 Web Storage
233 0
|
存储 缓存 移动开发
H5 新增内容大全(包括Web Workers、SSE、WebSocket的详细使用代码)
H5 新增内容大全(包括Web Workers、SSE、WebSocket的详细使用代码)
H5 新增内容大全(包括Web Workers、SSE、WebSocket的详细使用代码)
|
存储 Web App开发 缓存
Web Storage API的介绍和使用
Web Storage API的介绍和使用
Web Storage API的介绍和使用
|
移动开发 小程序 JavaScript
微信小程序web-view内嵌h5,实现双向传参案例
微信小程序web-view内嵌h5,实现双向传参案例
375 0
微信小程序web-view内嵌h5,实现双向传参案例