存储类型
- 他们均只能存储字符串类型的对象(虽然规范中可以存储其他原生类型的对象,但是目前为止没有浏览器对其进行实现)。
生命周期
- localStorage生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。
- sessionStorage生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过sessionStorage存储的数据也就被清空了。
- 如果不设置过期时间,那么cookie存储在内存里,如果通过cookie.setMaxAge(num)设置了过期时间,那么浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式;
cookie.setmaxage设置为0时,会马上在浏览器上删除指定的cookie,
cookie.setmaxage设置为-1时,代表关闭当前浏览器即失效。
什么情况下可共享(即可访问)?
- 不同浏览器无法共享localStorage或sessionStorage中的信息。
- 相同浏览器的不同页面间可以共享相同的 localStorage(页面属于相同域名和端口),但是不同页面或标签页间无法共享sessionStorage的信息。这里需要注意的是,页面及标 签页仅指顶级窗口,如果一个标签页包含多个iframe标签且他们属于同源页面,那么他们之间是可以共享sessionStorage的。
- cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。
-同源的判断规则:
http://www.test.com
https://www.test.com (不同源,因为协议不同)
http://my.test.com(不同源,因为主机名不同)
http://www.test.com:8080(不同源,因为端口不同)
使用示例
localStorage及sessionStorage的使用
- localStorage和sessionStorage使用时使用相同的API:
localStorage.setItem("key","value");//以“key”为名称存储一个值“value”
localStorage.getItem("key");//获取名称为“key”的值
- 枚举localStorage的方法:
for(var i=0;i<localStorage.length;i++){
var name = localStorage.key(i);
var value = localStorage.getItem(name);
}
- 删除localStorage中存储信息的方法:
localStorage.removeItem("key");//删除名称为“key”的信息。
localStorage.clear();//清空localStorage中所有信息
- 通过getItem或直接使用localStorage["key"]获取到的信息均为实际存储的副本。例如:这里是无法对实际存储的值产生作用的,下面的写法不可以:
localStorage.getItem("key").value1="a";
cookie的使用
存储大小限制
- localstorage 大小限制大概在5MB左右,但每个浏览器不一样;
- sessionstorage大小限制大概在5MB左右;
- cookie数据不能超过4KB,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识;
兼容性考虑
cookie
所有浏览器及其各版本均兼容cookie;
LocalStorage(SessionStorage同)
以下浏览器兼容LocalStorage及LocalStorage:
提供以下存取方法,兼容所有浏览器,并兼顾localstorage大容量存储的优势:
- 存值
var arrStr = "首页";
//存储,IE6~7 cookie 其他浏览器HTML5本地存储
if (window.localStorage) {
localStorage.setItem("menuTitle", arrStr);
} else {
Cookie.write("menuTitle", arrStr);
}
- 取值
var strStoreDate = window.localStorage
? localStorage.getItem("menuTitle"): Cookie.read("menuTitle");