javaScript 操作COOKIE实例代码分享
相对于javascript,通过后端的php来操作cookie是更容易简单的。所以由于以前很少通过JS去操作cookie,在使用javascript操作cookie时遇到了一些弯路,也分享出来,免得大家跟我犯同样的错误。
第一点,就是我知道document.cookie返回所有cookie组成的字符串,所以在设置cookie时,我想当然的以为是将新cookie拼接到该字符串上,再赋值给document.cookie就行了。
经过测试,完全不是这样,document.cookie=””; 是添加或更新新的cookie,比如document.cookie=”myck=yes;”则添加了个名字为myck的cookie;如果要同时添加多个cookie,document.cookie=”key1=1;key2=2;“ 就行了。如果要加上过期时间,存储域等信息,直接后面加上相关参数即可。比如:document.cookie=’myck=yes; expires=expire_time;domain=domain’。
该操作完全不影响已有的非同名cookie。
第二点,设置cookie的过期时间时,我错误的以为是设置个时间戳就行了,结果测来测去,发现没有效,cookie有效期总是session周期。后来才发现要用标准字符串时间格式,类似”Mon Jul 23 2012 20:08:10 GMT+0800 GMT“。如果用1343045321299这种,则是无效的。
cookie.js文件
代码如下 | |
var COOKIE=(function(){ var getDateString=function(offset){ var date=new Date(); date.setTime(+date+offset*1000); return date.toGMTString(); }, getCookies=function(){ var cookie=document.cookie||'', subs=cookie.split(/;s?/), _subs,cks={}; for(var i=0;i<subs.length,subs[i];i++){ _subs=subs[i].split('=') cks[unescape(_subs[0])]=unescape(_subs.slice(1).join('=')); } return cks; }
refresh:function(){ this.cookies=getCookies(); return this; }, has:function(key){ return this.cookies[key]!=null; }, get:function(key){ return this.cookies[key]; }, set:function(key,value,expire,path,domain,secure){ var myck=escape(key)+'='+escape(value==null?'':value); if(!isNaN(expire=parseFloat(expire))) myck+=';expires='+getDateString(expire); if(path)myck+=';path='+path; if(domain&&domain!=location.hostname)myck+=';domain='+domain; if(secure)myck+=';secure'; document.cookie=myck; return this.refresh().has(key); }, remove:function(key,path,domain){ var paths=[], domains=[], arr,self=this; if(path){ paths=[path]; }else{ arr=location.pathname.match(/.*?/|.+$/g); this.each(arr,function(i){ var a; paths.push(a=arr.slice(0,i+1).join('')); if(/[^/]+/$/.test(a)){ paths.push(a.slice(0,-1)); } if(/[^/]$/.test(a)){ paths.push(a+'/'); } }); }
domains=[domain]; }else{ arr=location.hostname.split('.'); this.each(arr,function(i){ domains.push(arr.slice(-i).join('.')); }); domains.push('.'+domains[0]); }
var path=this+''; self.each(domains,function(){ self.set(key,'',-1000,path,this+''); }); });
}, clear:function(path,domain){ for(var key in this.cookies){ this.remove(key,path,domain); } return !!path||!!domain||function(){ for(var key in this.cookies){ return false; } return true; }.call(this); }, each:function(arr,func){ var i=0,j=arr.length; for(;i<j;i++){ if(func.call(arr[i],i)===false){ break; } } } }.refresh(); })(); |
// 首先在页面中引入COOKIE.js
代码如下 | |
//调用 |
//注意:remove和clear方法,如果不设置path或domain,将会删除所有根域、子域、各个深度路径下的cookie。