Web Storage和cookie的区别
cookie只能设置大约4kb的数据,Web Storage可以保存高达数兆字节的大数据
cookie早网络上市可见的,有安全风险,每次加载URL要消耗网络带宽,Web Storage存储的数据不会在网络上传输
检测浏览器是否支持Web Storage
if (window.sessionStorage){
alert('supports sessionStorage');
}else{
alert('not support sessionStorage');
}
if (window.localStorage){
alert('supports localStorage');
}else{
alert('not support localStorage');
}
如果用户设置为“私有”模式的浏览器进行浏览,那么关闭浏览器之后就不会保存localStorage。
设置和获取数据
sessionStorage.setItem('key', 'val');
sessionStorage.key1 = 'val1';
sessionStorage['key2'] = 'val2';
var _key = sessionStorage.getItem('key');
_key = sessionStorage.key1;
对于同一页面,将数据存在JS变量里刷新了之后就不见了,如果存储在SessionStorage里就不会丢失数据。
使用SessionStorage可以防止使用cookies时候的数据泄露,比如在多页面之间cookies是共享的,如果一个页面修改了,其他的cookies也会受影响,而SessionStorage只对当前页面起作用。
localStorage和SessionStorage的区别
localStorage可以被同源的每个窗口或者标签页共享,数据的生命周期比窗口或浏览器的生命周期长
更新Web Storage 后的通信
window.addEventListener("storage", displayStorageEvent, true);
function displayStorageEvent(e){
var logged = e.key + "," + e.newValue + "," + e.oldValue + "," + e.url + "," + e.storageArea;
alert(logged);
}
如果有Storage事件触发了,就会执行displayStorageEvent方法
PS.在firefox和chrome中存储和读取都是正常的, 但是对storage事件的触发似乎有点问题, 自身页面进行setItem后没有触发window的storage事件, 但是同时访问A.html和B.html, 在A页面中进行 setItem能触发B页面中window的storage事件, 同样的在B页面中进行setItem能触发A页面中window的storage事件. 在IE9中, 页面自身的设值能触发当前页面的storage事件,同样当前页面的设值能触发同一”起源”下其他页面window的storage事件,这看起来似乎更 让人想的通些.
如果需要得到storage里的所有数据,可以遍历Storage变量里面的键值
var storage = window.sessionStorage;
for (var i = 0; i < storage.length; i++)
{
var keyname = storage.key(i);
var keyval = storage.getItem(keyname);
console.log(keyname + ":" + keyval);
}
还有两个方法
removeItem(key)用来删除对应键值下的数据
clear()删除所有数据
浏览器默认的允许每组同源页面的存储空间是5MB,如果超过了有的会抛出QUOTA_EXCEEDED_ERR错误,Opera会给用户自己分配空间
目前大部分浏览器只支持字符串格式的数据保存,可以通过转换来得到和存储需要的数据