一下是犀牛书中实现的操作cookie的api
function cookieStorage(maxage, path) {
var cookie = (function() {
var cookie = {};
var all = document.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 = list[i].substring(0,p);
var value = list[i].substring(p+1);
value = decoudeURIComponent(value);
cookie[name] = value;
}
return cookie;
}());
var keys = [];
for(var key in cookie)
keys.push(key);
this.length = keys.length;
this.key = function(n){
if(n<O||n>keys.length)
return null;
return keys[n];
};
this.getItem = function(name){
return cookie[name]||null;
};
this.setItem = function(key, value){
if(!(key in cookie)){
keys.push(key);
this.length++;
}
cookie[key] = value;
var cookie = key +"="+encoudeURIComponent(value);
if(maxage) cookie += ";max-age="+maxage;
if(path) cookie += ";path="+path;
document.cookie = cookie;
};
this.removeItem = function(key){
if(!(key in keys)) return;
delete cookie[key];
for(var i=0;i<cookie.length;i++){
if(keys[i]===key){
keys.splice(i,1);
break;
}
}
this.length--;
document.cookie = key+"=;max-age=0";
};
this.clear = function(){
for(var i=0;i<keys.length;i++){
document.cookie = key+"=;max-age=0";
}
cookie = {};
keys=[];
this.length=0;
};
}
在看到setItem这里我很疑惑,最后它直接定义一个新的cookie然后document.cookie = cookie;
这样难道不会覆盖之前的值吗,怎么设置多个key和value;
是这样的:
要改变cookie的值,需要使用想呕吐那个的名字、路径和域,但是新的值重新设置cookie的值。
要删除一个cookie,需要使用相同的名字、路径和域,然后指定一个任意(非空)的值,并将max-age属性值指定为0,在此设置cookie。
cookie的局限性:
1.IE6一下最多20个cookie
2.IE7和之后可以有50个cookie
3.FF之后可以有50个cookie
4.chrome和safari没有硬性限制
IE和opera会清理近期最少使用的cookie,FF会随机清理cookie。
cookie的最大大于为4094字节,每个domain最多只能有20条。