Web Storage

前面的话

  Web存储最初作为HTML5的一部分被定义成API形式,但是后来被剥离出来作为独立的一份标准了。Web存储标准所描述的API包含localStorage对象和sessionStorage对象,这两个对象实际上是持久化关联数组,是名值对的映射表,“名”和“值”都是字符串。Web存储易于使用、支持大容量(但非无限量)数据存储同时兼容当前所有主流浏览器。本文将详细介绍Web Storage

概述

  Web Storage的目的是克服由cookie带来的一些限制,当数据需要被严格控制在客户端上时,无须持续地将数据发回服务器。Web Storage的两个主要目标是:提供一种在cookie之外存储会话数据的途径以及提供一种存储大量可以跨会话存在的数据的机制

  Web Storage分成两类:sessionStorage和localStorage。sessionStorage保存的数据用于浏览器的一次会话,当会话结束(通常是该窗口关闭),数据被清空;localStorage保存的数据长期存在,下一次访问该网站的时候,网页可以直接读取以前保存的数据。除了保存期限的长短不同,这两个对象的属性和方法完全一样

  它们很像cookie机制的强化版,能够动用大得多的存储空间。目前,每个域名的存储上限视浏览器而定,Chrome是2.5MB,Firefox和Opera是5MB,IE是10MB。其中,Firefox的存储空间由一级域名决定,而其他浏览器没有这个限制。也就是说,在Firefox中,a.example.com和b.example.com共享5MB的存储空间。另外,与Cookie一样,它们也受同域限制。某个网页存入的数据,只有同域下的网页才能读取

  通过检查window对象是否包含sessionStorage和localStorage属性,可以确定浏览器是否支持这两个对象

  [注意]IE浏览器不支持在本地使用storage

存取数据

  sessionStorage和localStorage保存的数据,都以“键对”的形式存在。也就是说,每一项数据都有一个键名和对应的值。所有的数据都是以文本格式保存

  [注意]Storage类型只能存储字符串。非字符串的数据在存储之前会被转换成字符串

【setItem()】

  存入数据使用setItem方法。它接受两个参数,第一个是键名,第二个是保存的数据

  [注意]不同的浏览器存入的Storage位置不一样,不能通用

sessionStorage.setItem("key","value");
localStorage.setItem("key","value");

【getItem()】

  读取数据使用getItem方法。它只有一个参数,就是键名

var valueSession = sessionStorage.getItem("key");
var valueLocal = localStorage.getItem("key");

  除了使用setItem()和getItem()方法之外,还可以使用属性来存取数据

localStorage.setItem("key1","value1");
localStorage.testkey = ‘testvalue‘;
console.log(localStorage.getItem(‘testkey‘));//‘testvalue‘
console.log(localStorage.key1);//‘value1‘

清除数据

【removeItem()】

  removeItem()方法用于清除某个键名对应的数据

  [注意]清除不存在的键名不会报错,只会静默失败

sessionStorage.removeItem(‘key‘);
localStorage.removeItem(‘key‘);

  除了使用removeItem()方法,还可以使用delete操作来清除数据

  [注意]IE7-浏览器不支持delete操作符来清除storage数据

localStorage.setItem("key1","value1");
delete localStorage.key1;
console.log(localStorage.key1);//undefined
console.log(localStorage.getItem(‘key1‘));//null

【clear()】

  clear方法用于清除所有保存的数据

sessionStorage.clear();
localStorage.clear(); 

遍历操作

【key()】

  key(index)方法返回index位置处的值的名字

sessionStorage.setItem("key1","value1");
sessionStorage.setItem("key2","value2");
console.log(sessionStorage.key(0));//‘key1‘
console.log(sessionStorage.key(1));//‘key2‘
console.log(sessionStorage.key(2));//null

【length】

  length属性返回名值对儿的个数

console.log(sessionStorage.length);//2

  利用length属性和key()方法,可以遍历所有的键

for(var i = 0; i < localStorage.length; i++){
    var key = localStorage.key(i);
    var value = localStorage.getItem(key);
}

  还可以使用for-in循环来迭代

for(var key in localStorage){
    var value = localStorage.getItem(key);
}

存储事件

  首先,要特别注意的是,该事件只发生在window对象上,在document对象上触发无效,且使用DOM0级、DOM2级事件处理函数都可以

  无论对sessionStorage还是localStorage进行操作,都会触发storage事件。当通过属性或setItem()方法保存数据,使用delete操作符或removeItem()删除数据,或者调用clear()方法时,都会发生该事件

  [注意]只有当存储数据真正发生改变的时候才会触发存储事件。像给已经存在的存储项设置一个一模一样的值,抑或是删除一个本来就不存在的存储项都是不会触发存储事件的。通过getItem()方法获取数据也不会触发该事件

  一般地,storage事件不在导致数据变化的当前页面触发。如果浏览器同时打开一个域名下面的多个页面,当其中的一个页面改变sessionStorage或localStorage的数据时,其他所有页面的storage事件会被触发,而原始页面并不触发storage事件。可以通过这种机制,实现多个窗口之间的通信

  [注意]IE8-浏览器不支持storage事件,IE9+浏览器与其他标准浏览器有所不同,无论数据真实值是否变化,只要对数据进行设置或删除,都会触发触发该事件,且原始页面和同一域名下的其他页面都会触发

  这个事件的event对象有以下属性

url:触发事件的链接地址
key:设置或者删除的键名
newvalue:如果是设置值,则是新值;如果是删除键,则是null
oldValue:键被更改之前的值
storageArea:返回触发事件的对象
<!-- 原始页面 --><div>改变输入框中的值,再点击按钮,会触发storage事件</div>
<button id="btn">按钮</button>
<input type="text"  id="test">
<div id="result"></div>
<script>
btn.onclick = function(){
    localStorage.setItem("key",test.value);
}
window.onstorage = function(e){
    e = e || event;
    result.innerHTML = ‘key: ‘ + e.key + ‘<br>oldValue: ‘ + e.oldValue + ‘<br>newValue: ‘ + e.newValue + ‘<br>url: ‘ + e.url + ‘<br>storageArea: ‘ + e.storageArea;
}
</script>  
<!-- 其他页面 --><div id="result"></div>
<script>
window.onstorage = function(e){
    e = e || event;
    result.innerHTML = ‘key: ‘ + e.key + ‘<br>oldValue: ‘ + e.oldValue + ‘<br>newValue: ‘ + e.newValue + ‘<br>url: ‘ + e.url + ‘<br>storageArea: ‘ + e.storageArea;
}
</script>

原始页面:

其他页面:

时间: 2024-08-24 11:18:50

Web Storage的相关文章

数据存储之Cookie和Web Storage。

Cookie Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).接下来就谈谈cookie的一些利弊,cookie虽然在持久保存客户端数据提供了方便,分担了服务器存储的负担,但还是有很多局限性的. 第一:每个特定的域名下最多生成20个cookie. 1.IE6或更低版本最多20个cookie 2.IE7和之后的版本最后可以有50个cookie. 3.Firefox最多50个cookie 4.chrome和

利用HTML5开发Android(4)---HTML5本地存储之Web Storage

Web Storage是HTML5引入的一个非常重要的功能,可以在客户端本地存储数据,类似HTML4的cookie,但可实现功能要比cookie强大的多,cookie大小被限制在4KB,Web Storage官方建议为每个网站5MB. Web Storage又分为两种: sessionStorage localStorage 从字面意思就可以很清楚的看出来,sessionStorage将数据保存在session中,浏览器关闭也就没了:而localStorage则一直将数据保存在客户端本地: 不管

HTML5笔记3——Web Storage和本地数据库

上一篇:HTML5笔记2——HTML5音/视频标签详解 Web Storage概述 在HTML5中,除了Canvas元素之外,另一个新增的非常重要的功能是可以再客户端本地保存数据的Web Storage功能,之前可以使用Cookies在客户端 保存诸如用户名等简单用户信息,但通过长期使用,人们发现使用Cookies存储永久数据存在几个问题. 大小:Cookies的大小被限制在4KB 带宽:Cookies是随HTTP失误一起被发送的,因此会浪费一部分发送Cookies时使用的带宽 复杂性:要正确的

html5本地存储(一)------ web Storage

在html5中与本地存储相关的两个相关内容:Web Storage  与本地数据库 web Storage存储机制是对html4中的cookie存储机制的一个改善.web Storage就是在web上存储数据的功能(针对客户端本地),使用它可以再客户端本地建立一个数据库,这样可以存储页面内容在本地,还加快了访问数据的速度. web Storage分两种:sessionStorage   与  localStorage 一.sessionStorage sessionStorage为临时保存,将数

HTML5新特性之Web Storage

Web Storage是HTML5新增的特性,能够在本地浏览器存储数据,对数据的操作很方便,最大能够存储5M. Web Storage有两种类型: SessionStorage 和 LocalStorage.SessionStorage是在浏览器打开的时间内保存数据,当关闭网页的时候数据随之丢弃.LocalStorage保存的数据不会随着网页和浏览器的关闭而消失,它会保存在本地,当网页再次打开的时候,数据依然存在. Web Storage有四种常用的方法: getItem("Key")

HTML5分析实战Web存储机制(Web Storage)

Web Storage它是Key-Value在持久性数据存储的形式.Web Storage为了克服cookie把所引起的一些限制.当数据需要严格格控制client准时,没有必要不断地发回数据server. Web Storage有两个目的:提供一种存储会话数据的路径;提供存储大量能够跨会话存在的数据的机制. 最初的Web Storage规范包括了两个对象的定义:sessionStorage对象和globalStorage对象.这两个对象在支持的浏览器中都是以window对象属性的形式存在.支持s

Cookie的利弊以及与web storage的区别

cookie的优点:具有极高的扩展性和可用性 通过良好的编程,控制保存在cookie中的session对象的大小. 通过加密和安全传输技术,减少cookie被破解的可能性. 只有在cookie中存放不敏感的数据,即使被盗取也不会有很大的损失. 控制cookie的生命期,使之不会永远有效.这样的话偷盗者很可能拿到的就是一个过期的cookie. cookie的缺点: cookie的长度和数量的限制.每个domain最多只能有20条cookie,每个cookie长度不能超过4KB.否则会被截掉. 安全

THML5本地存储 Web Storage

Web Storage 介绍 HTML5 定义了本地存储规范 Web Storage , 提供了两种存储类型 API  sessionStorage 和 localStorage,二者的差异主要是数据的保存时长及数据的共享方式. ? localStorage 一直存储在本地,数据存储是永久的,除非用户或程序对其进行删除操作: ? sessionStorage在会话期内有效,数据在浏览器关闭后自动删除: localStorage是基于域的,任何在该域内的页面都可以访问, sessionStorag

HTML5之WEB Storage

什么是HTML5 web storage? 使用HTML5,web页面能够使用用户的浏览器本地保存数据. 在曾经,通常我们使用cookie来保存用户数据.然而使用web存储更加安全和高速. 数据不再包括在每个server请求中,仅仅存在你须要的时候.同一时候我们也能够保存大量数据,而不影响站点的性能. 数据都保存成key/value形式,一个web页面仅仅能够訪问自己的数据. 浏览器支持 IE8+,Firefox,Chrome.Opera和Safari 5都支持这个特性. 注意IE7和更早版本号