在客户端存储数据用的最广泛的方式非cookie莫属,随着HTML5的普及,新的本地存储方式localStorage和sessionStorage将在标准浏览器上大展身手。localStorage和sessionStorage是HTML5的新特性之一,说是新特性,其实微软公司早在IE8上就已经支持localStorage和sessionStorage这两个api了,只不过在IE八、9下测试这两个api时,务必在服务器环境下测试,在本地环境会报错。css
1、localStorage是什么?html
localStorage用于持久化的本地存储,除非手动删除数据,不然数据永不过时。java
2、相比于cookie,localStorage有什么优势?api
以下表,罗列出了cookie和localStorage的特性浏览器
特性 | localStorage | cookie |
容量大小 | 5M | 4k左右 |
兼容性 | IE8及以上浏览器 | 基本上全部浏览器都兼容 |
过时时间 | 永不过时 | 可自定义 |
是否随HTTP发送到服务端 | 否 | 是(占用带宽) |
做用域 | 子域名之间相互独立 | 可经过.setDomain设置主域名共享 |
localStorage的优势很明显,容量大、不会占用带宽,除此以外,localStorage提供了丰富的方法去设置、读取、移除数据。
localStorage.setItem(key,value) // 设置键值对
localStorage.getItem(key) // 经过键值读取对应的值
localStorage.removeItem(key) // 经过键值移除对应的值
localStorage.clear() // 初始化localStorage,清除全部键值对
localStorage.key(index) // 经过下标index来获取指定索引的key名服务器
sessionStorage跟localStorage长的差很少,那他们之间有什么差异呢?惟一的差异就在于它们保存数据的持久性上面,localStorage保存的数据永不过时,sessionStorage保存的数据在浏览器窗口关闭以后就消失了,不关闭浏览器窗口只刷新页面的话,sessionStorage保存的数据是依然存在的。它们拥有相同的属性和方法。cookie
虽然sessionStorage和localStorage这么好用,可是IE六、IE7上面不支持,咱们能够经过IE专属的UserData来弥补这个缺陷,UserData是早期IE浏览器用来本地存储数据用的,UserData的数据是以文件的形式保存在磁盘上,UserData须要依附于一个HTML标签来设置、读取、移除数据,并非全部HTML标签均可以,支持的HTML标签有:session
A, ABBR, ACRONYM, ADDRESS, AREA, B, BIG, BLOCKQUOTE, BUTTON, CAPTION, CENTER, CITE, CODE, DD, DEL, DFN, DIR, DIV, DL, DT, EM, FONT, FORM, hn, HR, I, IMG, INPUT type=button, INPUT type=checkbox, INPUT type=file, INPUT type=hidden, INPUT type=image, INPUT type=password, INPUT type=radio, INPUT type=reset, INPUT type=submit, INPUT type=text, KBD, LABEL, LI, LISTING, MAP, MARQUEE, MENU, OBJECT, OL, OPTION, P, PLAINTEXT, PRE, Q, S, SAMP, SELECT, SMALL, SPAN, STRIKE, STRONG, SUB, SUP, TABLE, TEXTAREA, TT, U, UL, VAR, XMP。app
UserData对数据的大小一样有必定的限制(从MSDN文档翻译过来的,英文水平好的建议看英文文档):
站点类型 | 单个文件大小限制(KB) | 单个域名的数据大小限制(KB) |
本地机 | 128 | 1024 |
局域网 | 512 | 10240 |
受信任的站点 | 128 | 1024 |
互联网 | 128 | 1024 |
受限站点 | 64 | 640 |
从表格上面能够看出,要兼容各类状况的话,建议单个UserData文件大小不超过64KB。
利用UserData来存储数据比localStorage麻烦一些,但仍是很简单,过程分为如下几步:
一、建立HTML标签
二、给HTML标签添加样式behavior:url(‘#default#userData’)或者js给HTML对象设置.addBehavior ("#default#userData")
3 、设置数据过时时间
四、载入UserData
五、存入数据/读取数据/删除数据
六、保存数据到存储区
看代码更容易理解(特别注意:如下代码请在body标签内部调用,在head标签内的script里调用提示没有权限,缘由未知):
<script type="text/javascript"> var UserData = { userData: null, name: document.location.hostname, init: function() { if (!this.userData) { try { this.userData = document.createElement("INPUT"); this.userData.type = "hidden"; this.userData.style.display = "none"; this.userData.addBehavior("#default#userData"); document.body.appendChild(this.userData); var expires = new Date(); expires.setDate(expires.getDate() + 365); this.userData.expires = expires.toUTCString(); } catch (e) { return false; } } return true; }, setItem: function(key, value) { if (this.init()) { this.userData.load(this.name); this.userData.setAttribute(key, value); this.userData.save(this.name); } }, getItem: function(key) { if (this.init()) { this.userData.load(this.name); return this.userData.getAttribute(key) } }, remove: function(key) { if (this.init()) { this.userData.load(this.name); this.userData.removeAttribute(key); this.userData.save(this.name); } } }; </script>
总结:在IE六、IE7市场份额逐渐降低的状况下,localStorage和sessionStorage将会应用的愈来愈普遍,cookie除了在某些必要的状况下,彻底能够用localStorage替代,固然,不建议在localStorage里面保存敏感数据,由于localStorage能够随时读取修改或删除。
参考文档:http://www.css88.com/archives/3717
By:王美建 from:http://www.cnblogs.com/wangmeijian/p/4518606.html 转载请保留署名和出处!