[color=#800000]functionSetcookie(name,value){//設定名稱為name,值為value的Cookievarargc=setcookie.arguments.length;
varargv=SetCookie.arguments;
varpath=(argc>3)?argv[3]:null;
vardomain=(argc>4)?argv[4]:null;
varsecure=(argc>5)?argv[5]:false;
document.cookie=name+"="+value+((path==null)?"":(";path="+path))+((domain==null)?"":(";domain="+domain))+((secure==true)?";secure":"");
}
functionDeletecookie(name){//刪除名稱為name的Cookie
varexp=newDate();
exp.setTime(exp.getTime()-1);
varcval=GetCookie(name);
document.cookie=name+"="+cval+";expires="+exp.toGMTString();
}
functionClearcookie(){//清除COOKIE
vartemp=document.cookie.split(";");
varloop3;
varts;
for(loop3=0;loop3;){
ts=temp[loop3].split("=")[0];
if(ts.indexOf("mycat")!=-1){
DeleteCookie(ts);
}//如果ts含“mycat”則執行清除
}
}
functiongetCookieVal(offset){//取得項名稱為offset的cookie值
varendstr=document.cookie.indexOf(";",offset);
if(endstr==-1){
endstr=document.cookie.length;
}
returnunescape(document.cookie.substring(offset,endstr));
}
functionGetCookie(name){//取得名稱為name的cookie值
vararg=name+"=";
varalen=arg.length;
varclen=document.cookie.length;
vari=0;
while(i<clen){
varj=i+alen;
if(document.cookie.substring(i,j)==arg){
returngetCookieVal(j);
}
i=document.cookie.indexOf("",i)+1;
if(i==0){
break;
}
}
returnnull;
}
[/color]------------------------------------------------------------
javascript操作cookie
問題:使得在訪問頁面的時候能夠沿用上次的設定,或者在不同的頁面間共享數據。比如用戶在訪問網站的時候設定了頁面字型的大小,那么會希望下次訪問的時候仍然能使用同樣的設定進行瀏覽,而不用重複設定。
解決方案:
在用戶瀏覽頁面並進行設定時,將這些設定保存在cookie中,下次訪問的時候讀取cookie中的設定。
參考下面的腳本:
//utilityfunctiontoretrieveanexpirationdatainproperformat;
functiongetExpDate(days,hours,minutes)
{
varexpDate=newDate();
if(typeof(days)=="number"&&typeof(hours)=="number"&&typeof(hours)=="number")
{
expDate.setDate(expDate.getDate()+parseInt(days));
expDate.setHours(expDate.getHours()+parseInt(hours));
expDate.setMinutes(expDate.getMinutes()+parseInt(minutes));
returnexpDate.toGMTString();
}
}
//utilityfunctioncalledbygetCookie()
functiongetCookieVal(offset)
{
varendstr=document.cookie.indexOf(";",offset);
if(endstr==-1)
{
endstr=document.cookie.length;
}
returnunescape(document.cookie.substring(offset,endstr));
}
//primaryfunctiontoretrievecookiebyname
functiongetCookie(name)
{
vararg=name+"=";
varalen=arg.length;
varclen=document.cookie.length;
vari=0;
while(i<clen)
{
varj=i+alen;
if(document.cookie.substring(i,j)==arg)
{
returngetCookieVal(j);
}
i=document.cookie.indexOf("",i)+1;
if(i==0)break;
}
return;
}
//storecookievaluewithoptionaldetailsasneeded
functionsetCookie(name,value,expires,path,domain,secure)
{
document.cookie=name+"="+escape(value)+
((expires)?";expires="+expires:"")+
((path)?";path="+path:"")+
((domain)?";domain="+domain:"")+
((secure)?";secure":"");
}
//removethecookiebysettingancientexpirationdate
functiondeleteCookie(name,path,domain)
{
if(getCookie(name))
{
document.cookie=name+"="+
((path)?";path="+path:"")+
((domain)?";domain="+domain:"")+
";expires=Thu,01-Jan-7000:00:01GMT";
}
}
使用getCookie(name)函式來讀取cookie中保存的值,參數name為cookie項的名稱。如果該cookie項不存在則返回一個空字元串。
使用setCookie()函式來保存cookie項的值,其中第一、二兩個參數分別為cookie項的名稱和值。如果想為其設定一個過期時間,那么就需要設定第三個參數,這裡需要通過getExpDate()獲得一個正確格式的參數。
最後,使用deleteCookie()來刪除一個已存在的cookie項,實際上是通過讓該項過期。
cookie將數據保存在客戶端。頁面的腳本只能讀取所在域和伺服器的cookie值,如果域內有多個伺服器,那么需要設定第五個參數,以指定伺服器。瀏覽器的容量一般限定為每伺服器20個name/value對,每個cookie項不超過4000個字元,更現實點,單個cookie項應少於2000字元,也就是說不要用cookie在客戶端保存大容量數據。
不同的瀏覽器保存cookie的方式也有所不同。IE為每個域的cookie建立一個文本檔案,而Netscape則將所有的cookie存儲在同一個文本檔案中。
注意:cookie存放在客戶端,所以會受到瀏覽器設定的影響,比如用戶可能會禁用cookie。要檢測瀏覽器是否支持cookie,使用屬性navigator.cookieEnabled來判斷。
參考: (oreilly) Java Script And Dhtml Cookbook.chm