javascript操作cookie小记录

<script>
var cookie={
 setcookie:function(name,value,days,path){
  var cookie=name+"="+value;
  if(days){
   var date=new Date();
   date.setTime(date.getTime()+days*24*3600*1000);
   cookie+=";expires="+date.toUTCString();
   }
  if(path){
   cookie+=";path="+'"'+path+'"';
   }
   document.cookie=cookie;
   },
 getcookie:function(name){
  var reg= new RegExp(";?"+name+"=([^;]*)",'');
  var cookie=document.cookie;
  var values=cookie.match(reg);
  alert(values[1]);
  },
 delecookie:function(name){
  this.setcookie(name,'',-3001) }
 }
cookie.setcookie('11','23',22,'')
cookie.delecookie('11');
//cookie.getcookie('age');
alert(document.cookie)

    
     关于javascript写入cookie,其实很简单的。记录下原理吧,之所以封装了3个函数,主要是为了以后操作方便,直接用document.cookie属性进行cookie操作实在太粗糙不美观了。

第一个setcookie函数主要是写入cookie,cookie的本质就是一个字符串,涉及到的属性有name(名称),value(值),expires(cookie值失效日期,这是每个cookie的每个值都有的属性,一次设置只代表当前cookie值的失效时间,
一般用new Date()获取当前时间,然后用该方法返回值的getTime转化成微秒值再加上需要保存cookie的时间的微秒值后,又转化为正常时间。这里有一点要注意,这个时间要转化成gmt或者utc形式的,用toGMTString()或者toUTCString()方法进行转换,一般推荐是转化成utc方式的值,便于阅读。),
还有一个path值,path是指cookie的存储路径,一般cookie是和写它的网页相关联的,如果想让同一个域下的所有网页都可以访问cookie,将path的值设置 为'/'就可以了。
还有domain属性,鉴于同源策略的限制,一般cookie只能访问制定主机下的网页,也可以将domain设置为主机的子域,进行访问范围改变。secure 属性说明了cookie是在http下还是https下访问,默认是在http下访问的,若将其值设置为true,则在https下访问。



      

  getcookie函数是获取相应的cookie值
获取对应的cookie的值有两种方法,两种方法的第一步都是先获取document.cookie的值,
第一种方法先将此字符串转化为数组,然后用for循环获得要获取的的对应值,然后再用一遍string的split方法获取相应的值。
第二种方法是直接用正则获取,如上面的示例,这种办法的重点在于match方法,因为正面里面涉及到小括弧分组,所以match获取的数组里面,第一个是获取的相匹配的name=value形式的值,第二个则是相应的小括弧里面匹配的值,也就是要获取的对象,在这里要注意一点,我们习惯性的写法是在match()函数里面直接写正则,如果这样的,getcookie()的形参是无法直接写入正则的,所以我们用 new RegRxp(),它的第一个参数本身就是一个字符串,所以这样写就可以避免这个问题。



    

delecookie是删除相应的cookie值,删除cookie的原理就是将cookie的值设置为过期,这就很好办了,对其cookie值附加一个expires值就可以了。

var Cookie = new Object();
Cookie.setCookie = function(name, value, option){
    var str = name +'='+ escape(value);
    if(option){
        if(option.expireHours){
            var d=new Date();
            d.setTime(d.getTime()+option.expireHours*3600*1000);
            str += '; expires='+d.toGMTString();
        }
        if(option.path) str += '; path='+option.path;
        if(option.domain) str += '; domain='+option.domain;
        if(option.secure) str += '; true';
    }
    document.cookie = str;
};

Cookie.getCookie = function(name){
    var arr = document.cookie.split('; ');
    if(arr.length == 0) return '';
    for(var i=0; i tmp = arr[i].split('=');
        if(tmp[0] == name) return unescape(tmp[1]);
    }
    return '';
};

Cookie.delCookie = function(name){
    this.setCookie(name,'',{expireHours:-1});
};

Cookie.length = function(){
    return document.cookie.split('; ').length;
};