在浏览器操作中,需要利用Javascript在用户浏览器中本地存储一些数据,以达到一些不能用服务器来识别的功能,如识别用户的第二次访问等。
本地存储的三种方式:cookie localStorage sessionStorage.
区别:cookie数据始终在同源的[http请求]中携带(即使不需要),即cookie在浏览器和服务器间来回传递。而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下,子级可以访问父级,而父级不可以访问子级,一般一个网站共享一套cookie。存储大小限制也不同,cookie数据不能超过[4k],而且部分浏览器有条数限制,如IE6,只支持每个域名20个cookies,同时因为每次[http请求]都会携带cookie,所以cookie只适合保存很小的数据,如会话标识。sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。Web Storage 支持事件通知机制,可以将数据更新的通知发送给监听者。Web Storage 的 api 接口使用更方便。
cookie设置:
function setCookie(key,value,iDay){
var key = encodeURIComponent(key);
var value = encodeURIComponent(value);
var oDate = new Date();
if(iDay){
document.cookie =key + '=' + value +';PATH=/; EXPIRES=' + oDate.setDate(oDate.getDate() + iDay).toGMTString();
}else{
document.cookie = key + '=' + value + '; PATH=/;';
}
}
cookie读取:
function getCookie(key){
var key = encodeURIComponent(key);
var arr = document.cookie.split('; '),
i,
len = arr.length;
for(i=0; i<len; i++){
var arr2 = arr[i].split('=');
if(arr2[0] == key){
return decodeURIComponent(arr2[1]);
}
}
}
cookie删除:
function removeCookie(key){
var key = encodeURIComponent(key);
//利用cookie的过期机制,其中value值任意填写;
setCookie(key,'rem',-1);
}
localStorage和sessionStorage书写方式一样,都有两种书写方式:
存值:
localStorage.a = '存值';
或:
localStorage.setItem('a','存值');
取值:
alert(localStorage.a);
或:alert(localStorage.getItem('a'));
删除:
delete localStorage.a;
或:localStorage.removeItem('a');
删除全部:
localStorage.clear();