讀古今文學網 > 編寫高質量代碼:改善JavaScript程序的188個建議 > 建議157:推薦封裝Cookie應用接口 >

建議157:推薦封裝Cookie應用接口

在默認狀態下,存取Cookie信息是比較麻煩的。由於Cookie是通過字符串來存取信息的,所以容易導致在執行賦值運算時需要轉換讀取信息的數據類型。另外,煩瑣的構造和解析Cookie信息字符串本身就令人生厭,在經常使用Cookie信息的Web應用中格外不便。因此,建議讀者在進行Web開發前,封裝Cookie以便能夠提高開發效率。

Cookie封裝的原則:接口高度統一,參數自由、靈活。Cookie存取功能比較強大,具體包括寫入、讀取和刪除Cookie信息,能夠滿足日常開發的需要。下面介紹一下Cookie封裝的具體設計思路。

定義函數Cookie,利用該函數既可以寫入指定的Cookie信息,刪除指定的Cookie信息,也能夠讀取指定名稱的Cookie值,另外,在該函數中還可以指定Cookie信息的有效期、有效路徑、作用域和安全性選項設置。如果在調用Cookie函數時,僅指定一個參數值,則表示讀取指定名稱的Cookie值;如果指定兩個參數,則表示寫入Cookie信息,其中第一個參數表示名稱,第二個參數表示值。在第三個參數中還可以傳遞選項信息,這些信息以字典形式存儲在對像中進行傳遞。前兩個參數以字符串形式進行傳遞。完整的封裝代碼如下:


//封裝Cookie存取功能,可以寫入Cookie信息,讀取Cookie信息,也可以刪除Cookie信息

/*參數:name表示Cookie的名稱,value表示Cookie值,都以字符串形式傳遞。options參數是一個對象,該對象可以包含多項信息,用來指定Cookie信息的有效期、路徑、作用域和完全性設置*/

//返回值:當僅有一個參數時,該函數獲讀取並返回Cookie值

function Cookie(name,value,options){

if(typeof value!='undefined'){//如果第二個參數存在

options=options||{};

if(value===null){

options.expires=-1;//設置失效時間

}

var expires='';

//如果存在時間參數項,並且類型為number,或者具體時間,那麼分別設置時間

if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){

var date;

if(typeof options.expires=='number'){

date=new Date;

date.setTime(date.getTime+(options.expires*24*60*60*1000));

}

else{

date=options.expires;

}

expires=';expires='+date.toUTCString;

}

var path=options.path?';path='+options.path:'';//設置路徑

var domain=options.domain?';domain='+options.domain:'';//設置域

var secure=options.secure?';secure':'';//設置安全措施,為true則直接設置,

否則為空

//把所有字符串信息都存入數組,然後調用join方法轉換為字符串,並寫入Cookie信息

document.Cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');

}

else{//如果第二個參數不存在,則表示讀取指定Cookie信息

var CookieValue=null;

if(document.Cookie&&document.Cookie!=''){

var Cookie=document.Cookie.split(';');

for(var i=0;i<Cookies.length;i++){

var Cookie=(Cookies[i]||"").replace(/^\s+|\s+$/g,"");

if(Cookie.substring(0,name.length+1)==(name+'=')){

CookieValue=decodeURIComponent(Cookie.substring

(name.length+1));

break;

}

}

}

return CookieValue;//返回查找的Cookie值

}

}


下面是關於該封裝函數的應用示例。

1)寫入Cookie信息:


Cookie("user","baidu");//簡單寫入一條Cookie信息

Cookie("user","baidu",{//寫入一條Cookie信息,並設置更多選項

expires:10,//有效期為10天

path:"/",//整個站點有效

domain:"www.css8.cn",//有效域名

secure:true//加密數據傳輸

});


2)讀取Cookie信息:


Cookie("user")


3)刪除Cookie信息:


Cookie("user",null);


通過上面代碼,可以實現對Cookie信息的讀寫操作,這樣用戶就可以方便地在客戶端存儲簡短的頁面信息,避免因為在服務器端存儲這些信息而增加服務器運行負擔和浪費服務器端資源。