javascript客户端储存。

localStorage:

localStorage储存的数据是永久性的,除非自己刻意删除。
localStorage的作用域受限制,如果用firefox访问,下次用另一个浏览器再次访问的时候,是无法获取上次的数据。
非同源文档无法共享数据。同源主要是通过主机名、协议、端口来确定。

使用:

// 以userName储存一个张三
localStorage.setItem('userName','张三'); 
localStorage.getItem('userName');  // 拿到张三
localStorage.removeItem('userName');  // 删除userName的数据
localStorage.clear();  // 删除全部数据

其他浏览器不可用的时候依然可以依赖其他储存机制:

var memory = window.localStorage || (window.UserDataStorage && new UserDataStorage()) ||
             new cookieStorage();
var userName   =  memory.getItem('userName');  // 在对应的机制中查询数据。

sessionStorage:

sessionStroage储存有效期,窗口或标签页关闭了,数据就被删除了。
非同源文档无法共享数据。
如果同源的文档渲染在不同的浏览器中,那么他们互相之间拥有的数据是各自的,无法共享。

使用:

sessionStorage.setItem('userName','张三');  // 储存数据
sessionStorage.getItem('userName'); // 获取数据
sessionStorage.removeItem('userName');  //删除单个
sessionStorage.clear(); // 删除全部

cookie

cookie默认有效期很短,一旦用户关闭浏览器,数据就丢失了。它的作用域并不是局限在浏览器单个窗口,而是整个浏览器的进程。如果想要延长有效期,可以通过max-age属性,要明确告诉浏览器有效期为多张,单位为毫秒。一旦设置了有效期,浏览器会将数据储存在一个文件中,直到通过了指定的有效期才会删除。

由于cookie的名/值是不允许包含分号,逗号,空白符,因此在储存前要使用核心的全局函数encodeURIComponent()对值进行编码。读取的时候也要decodeURIComponent()进行解码。

不允许浏览器保存超过300个cookie,每个web服务器保存的cookie数不能超过20个。
每个cookie保存的数据不能超过4kb。
现代浏览器已经允许cookie总数超过300个,但部分浏览器还是4kb。

使用:

// document.lastModified 返回文档被修改的最后日期与时间
document.cookie =  'version='+encodeURIComponent(document.lastModified);

//保存cookie且设置有效期:

function setcookie(name,value,daysToLive){
var cookie  =  name+"="+encodeURIComponent(value);  //编码,进行转义分号等等。
if(typeof daysToLive ==="number"){  //如果是一个数字
cookie +=";max-age= "+(daysToLive*60*60*24);  // 设置max-age属性时间
document.cookie = cookie;  // 最后编码且设置好的进行保存到cookie。
}
}

读取cookie:

function getcookie(){
var cookie = {};
var all  = doucment.cookie;   // 获取所有的cookie值
if(all===" "){
 return cookie;
}
var list  = all.split("; ") // 分离出名/值
for(var i = 0; i<list.length; i++){
var cookie  = list[i];
var p   = cookie.indexOf("=");  //找到第一个=号
var name =  cookie.substring(0,p); // 拿到cookie名
var value = cookie.substring(p+1);  // 获取cookie对应的值
value = documentURIComponent(value); 对其值进行解码
cookie[name] = value;  // 将名/值对储存到对象中。
}
return cookie;
}

利用userData持久化数据。

var memory = document.createElement('div');
memory.id = "memory";
memory.style.display = 'none';
memory.style.behavior = "url('#default#userData')"; // 附加userData行为
document.body.appendChild(memory);

赋予了userDta行为,该元素就拥有了load()和save()方法。load用于载入数据,载入数据后可以使用getAttribute()查询数据,setAttribute()设置属性。然后调用sava()方法可以储存新的数据。
通过userData储存的数据,除非手动删除,否则永不失效。可以设置expires属性来指定它的过期时间。
userData允许储存的数据量比cookie大,但是比localStorage与sessionStorage小。

memory.load('myStoredData');  // 根据指定名,载入对应的数据
var name  = memory.getAttribute('userName');  // 获取其中数据片段
if(!name){   //如果无指定的片段
name = prompt('What is your name?');
memory.setAttibute('userName',name);
memory.save('myStoredData');   // 保存
}
var now  = (new Date()).getTime();
var expires = now + 100*24*60*60*1000;  // 距离当前时间100天,换成了毫秒数
expires = new Date(expires).toUTCString();  // 转换成字符串
memory.expires = expires;  // 通过expries属性设置userData过期时间

实现基于IE的userData部分储存API:

function UserDataStorage(maxage){
var memory = document.createElement('div');
memory.style.display = 'none';
memory.style.behavior = "url('#default#userData')";
document.body.appendChild(memory); 
if(maxage){
var now = new Date().getTime(); // 当前时间
var expires = now + maxage*1000; // 当前时间加上有效期
memory.expires = new Data(expires).toUTCString(); // 转为字符串
}
memory.load('UserDataStorage');  // 根据指定名,载入对应的数据
this.getItem = function(key){
return memory.getAttribute(key) || null;
};
this.setItem = function(key,value){
memory.setAttribute(key,value); // 设置属性的来保存数据
memory.save('UserDataStorage');  // 保存数据改变后的状态
}
this.removeItem = function(key){
memory.removeAttribute(key); // 删除储存的数据
memory.save("UserDataStroage"); // 保存数据改变后的状态
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值