《JavaScript权威指南》中的一个Cookie工具

《JavaScript权威指南》(第五版)中的一个Cookie工具,但是其中一处代码在IE下有问题,关掉所有IE窗口后cookie value没有保存。

原因是IE6,7,8,9都没有很好的支持max-age属性,所以针对IE使用expires属性代替。

以下是我修改后的代码。

Cookie.js


function Cookie(name){
this.$name = name;
var allcookies = document.cookie;
if(allcookies=="") return;
var cookies = allcookies.split(';');
var cookie = null;
for(var i=0; i if(cookies[i].substring(0,name.length+1)==(name+"=")){
cookie = cookies[i];
break;
}
}
if(cookie==null) return;
var cookieval = cookie.substring(name.length+1);
var a = cookieval.split('&');
for(var i=0; i a[i] = a[i].split(':');
for(var i=0;i this[a[i][0]] = decodeURIComponent(a[i][1]);
}
}

Cookie.prototype.store = function(daysToLive,path,domain,secure){
var cookieval = "";
for(var prop in this){
if((prop.charAt(0)=='$')||(typeof this[prop] == 'function'))
continue;
if(cookieval!="") cookieval += '&';
cookieval += prop + ':' + encodeURIComponent(this[prop]);
}
var cookie = this.$name + "=" + cookieval;
if(daysToLive||daysToLive==0){
if(window.ActiveXObject){ //update for ie 6,7,8,9
var nDaysLater = (new Date()).getTime() + (daysToLive*24*60*60*1000);
cookie += "; expires=" + (new Date(nDaysLater)).toGMTString();
}
else
cookie += "; max-age=" + (daysToLive*24*60*60);
}
if(path) cookie += "; path=" + path;
if(domain) cookie += "; domain" + domain;
if(secure) cookie += "; secure";
document.cookie = cookie;
}
Cookie.prototype.remove = function(path,domain,secure){
for(var prop in this){
if(prop.charAt(0)!='$' && typeof this[prop]!='function')
delete this[prop];
}
this.store(0,path,domain,secure);
}
Cookie.enabled = function(){
if(navigator.cookieEnabled != undefined) return navigator.cookieEnabled;
if(Cookie.enabled.cache != undefined) return Cookie.enabled.cache;
if(window.ActiveXObject) //update for ie 6,7,8,9
document.cookie = "testcookie=test; expires=" + (new Date((new Date()).getTime() + (10000*1000))).toGMTString();
else
document.cookie = "testcookie=test; max-age=10000";
var cookies = document.cookie;
if(cookies.indexOf("testcookie=test") == -1){
return Cookie.enabled.cache = false;
}else{
if(window.ActiveXObject) //update for ie 6,7,8,9
document.cookie = "testcookie=test; expires=" + (new Date((new Date()).getTime() - (10000*1000))).toGMTString();
else
document.cookie = "testcookie=test; max-age=0";
return Cookie.enabled.cache = true;
}
}



你可能感兴趣的:(前端开发,cookie,javascript,expires,max-age)