最近用到了在前端需要使用javascript对cookie进行操作,本来想找个现成的代码来用,无奈搜了半天没有找到。
于是自己写了个,也随手分享出来,凑个博客更新。。。。。
1: var COOKIE=(function(){
2: var cookie=document.cookie||'',
3: subs=cookie.split(';'),
4: cks={},
5: trim=function(str){
6: return str.replace(/^\s+|\s+$/g,'');
7: },
8: getDateString=function(offset){
9: var date=new Date();
10: date.setTime(+date+offset*1000);
11: return date.toGMTString();
12: }
13: for(var i=0;i<subs.length;i++){
14: var _sub=subs[i];
15: var pos=_sub.indexOf("=");
16: var key,value;
17: if(pos>=0){
18: key=trim(_sub.substring(0,pos));
19: value=_sub.substring(pos+1);
20: cks[unescape(key)]=unescape(value);
21: }
22: }
23:
24: return {
25: has:function(key){
26: return typeof cks[key]!='undefined';
27: },
28: set:function(key,value,expire,path,domain){
29: cks[key]=value;
30: var myck=escape(key)+'='+escape(value);
31: if(typeof expire!='undefined')
32: myck+=';expires='+getDateString(expire);
33: if(typeof path!='undefined')
34: myck+=';path='+path;
35: if(typeof domain!='undefined')
36: myck+=';domain='+domain;
37: document.cookie=myck;
38: },
39: remove:function(key){
40: delete cks[key];
41: document.cookie=escape(key)+'=;path=/;expires='+getDateString(-10000);
42: },
43: get:function(key){
44: return cks[key];
45: },
46: cookies:cks
47: }
48: })();
相对于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这种,则是无效的。
。。。。。。。额。。没了。。。
如何使用?
1: //检测是否存在名字为abc的cookie
2: COOKIE.has('abc');
3:
4: //获取名字为abc的cookie的值
5: COOKIE.get('abc');
6:
7: //添加一个新cookie
8: COOKIE.set('abc','123');
9: COOKIE.set('abc','123',7*24*3600);//带过期时间的,单位是秒
10:
11: //移除名字为abc的cookie
12: COOKIE.remove('abc');