javascript讀寫cookie

 

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;
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章