js操作cookies



function setCookie(name,value)
{
    var Days = 30;
    var exp = new Date();    //new Date("December 31, 9998");
        exp.setTime(exp.getTime() + Days*24*60*60*1000);
        document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
function getCookie(name)
{
    var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
        if(arr=document.cookie.match(reg)) return unescape(arr[2]);
        else return null;
}
function delCookie(name)
{
    var exp = new Date();
        exp.setTime(exp.getTime() - 1);
    var cval=getCookie(name);
        if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}

js操作cookies類
2007-09-12 15:43

方法一:

<scriptlanguage="JavaScript">

function Cookie(delim){//操作Cookie類

     Array.prototype.splice=function(){

         var len=arguments.length,tarray=[],i=arguments[0]+arguments[1];

         if(len>1){

            while(i<this.length)tarray[tarray.length]=this[i++];

            this.length=arguments[0];

            if(len>2)for(var i=2;i<len;i++)this[this.length]=arguments[i];

            var tlen=tarray.length,i=0;

            while(i<tlen)this[this.length]=tarray[i++];

            }

        return this;

         }

     this._Cookie=[];

     this.Load=function(){

         if(document.cookie.indexOf(";")!=-1){

            var _sp,_name,_tp,_tars,_tarslength;

            var _item=document.cookie.split(";");

            var _itemlength=_item.length;

            while(_itemlength>0){

                _sp=_item[--_itemlength].split("=");

                _name=_sp[0];

                _tp=_sp[1].split(",");

                _tars=_tp.slice(1,_tp.length);

                this._Cookie[_name]=[];

                this._Cookie[_name]=_tars;

                this._Cookie[_name]["timeout"]=_tp[0];

                }

            return true;

            }

        return false;

         }

     this.Save=function(){

         var _str,_ars,_mars,_marslength,timeout,i,key;

         for(key inthis._Cookie){

            if(!this._Cookie[key])return;

            _str=[];

            _mars=CookieClass._Cookie[key];

            _marslength=_mars.length;

            for(i=0;i<_marslength;i++)_str[_str.length]=escape(_mars[i]);

             document.cookie=key+"="+_mars["timeout"]+(_str.length>0?",":"")+_str+";expires="+new Date(parseInt(_mars["timeout"])).toGMTString();

            }

 

         }

     this.GetCookieCount=function(){

         var _length=0,key;

        for(key in this._Cookie)_length++;

        return _length;

         }

     this.Create=function(name,days){

         this._Cookie[name]=[];

         this._Cookie[name]["timeout"]=new Date().getTime()+days*86400000;

         }

     this.Modify=function(name,days){

         this.Create(name,days);

         }

     this.GetTime=function(name){

        return new Date(parseInt(this._Cookie[name]["timeout"]));

         }

     this.Delete=function(name){

         this.Create(name,0);

         }

     this.AddItem=function(name,value){

         this._Cookie[name][this._Cookie[name].length]=value;

         }

     this.DelItem=function(name,index){

         this._Cookie[name].splice(index,1);

         }

     this.GetCount=function(name){

        return this._Cookie[name].length;

         }

     this.GetItem=function(name,index){

        return this._Cookie[name][index];

         }

     }

</script>

<scriptlanguage="JavaScript">

/*

====================================

Design :Flashsoft

====================================

瀏覽器能夠通過Cookies保留有關數據。象Windows的註冊表一樣,用戶不必知道Cookies的具體位置,瀏覽器能找到這些數據。第六代 的瀏覽器,不管是IE還是NS都支持document.cookie屬性。通過這個屬性來讀取或修改Cookies的值。不過Cookies的存儲形式是 非結構化的長字符串,需要經過相應的解析後纔有意義。

 

Cookies的表達如下,除了name=value以外,其它均爲可選:

name=value;

expires=date;

domain=domainname

path=pathname;

secure;

 

例如:

User=HockeyDude;expires=Thu,01-Jan-70 00:00:01 GMT; domain=www.mydomain.com; path=/images;secure;

Pass=Gretzky; expires=Thu,01-Jan-7000:00:01 GMT; domain=www.mydomain.com; path=/images; secure;

 

這麼長的兩個字符串只代表了兩個Cookies。如果還要再加上電子信箱或其他信息就還得加長字符串。通常都是通過分解這樣的字符串來取得各個變量或元素的。這實在是費時費力的事。

使用面向對象設計(ObjectOriented Design,OOD)的思路來編寫Cookies處理函數,其特點如下:

 

便於增刪子項。這是很重要的,有些瀏覽器限制Cookies的使用數量。

通過修改函數可以容易地修改時效數據。通常的做法很麻煩,要拷貝Cookies,刪除原Cookies,修改並重寫Cookies。

Cookies和它的子項存放在數組裏。可以根據需要快速而有效地進行修改。這樣也無須解析那長長的字符串。

 

Cookies對象的使用

以下是對象的公有方法:

 

 

方括號[]內是可選參數

//構造

Cookie([定界符,缺省爲句點]) - 構造函數

 

//初始化

GetCookieCount() - 返回Cookies數量

Create(name, days) - 創建Cookies及其時效天數

Modify(name, days) - 修改Cookies的時效天數

Delete(name) - 刪除Cookies及其子項

GetTime(name) - 返回指定Cookies的過期時間

GetCount(name) - 返回Cookies的子項數量

AddItem(name,value) - 增加一個子項

GetItem(name,index) - 返回指定索引的子項

DelItem(name,index) - 刪除指定的子項

 

//存取

Load() - 讀取Cookies

Save() - 存儲Cookies

 

下面是應用實例:

*/

var CookieClass=new Cookie();

if(!CookieClass.Load()){

     CookieClass.Create("Pass",1);

     CookieClass.Create("User",1);

     CookieClass.AddItem("Pass","Ps1");

     CookieClass.AddItem("Pass","Ps2");

     CookieClass.AddItem("Pass","Ps3");

     CookieClass.AddItem("Pass","Ps4");

     CookieClass.AddItem("Pass","Ps5");

     CookieClass.AddItem("Pass","Ps6");

     CookieClass.DelItem("Pass",1);

     CookieClass.Save();

     }

alert("Cookie過期時間:"+CookieClass.GetTime("Pass").toLocaleString());

alert(document.cookie);

</script>

 

 

方法二:

 

 

 

<script language="Javascript">

function eyunCookie(){

     this.key="";//初始化key。

     this.value="";//初始化key's value。

     this.expires=0;//初始化cookie的有效時間,單位毫秒。

     this.init=function(){//對象初始化

         this.key="";

         this.value="";

         this.expires=0;

     }

     this.set=function(key,value,expires){//設置cookie

         if(this.key=="")this.key=key;

         if(this.value=="")this.value=value;

         if(this.expires<=0)this.expires=expires;

         if(this.key==""||typeof(this.key)!="string"){

            alert("請先設置欲保存的cookie名稱!");

            this.init();

            return false;

         }

         if(this.key.match(/[,; ]/)){

            alert("cookie名稱中不能包含“,”、“;”或空格!");

            this.init();

            return false;

         }

         if(this.value.toString().match(/[,; ]/)||typeof(this.value)=="undefined"){

            alert("cookie值中不能包含“,”、“;”或空格!");

            this.init();

            return false;

         }

         if(this.expires<=0||typeof(this.expires)!="number"){

            alert("請先正確設置cookie的有效時間!");

            this.init();

            return false;

         }

         var cookie=document.cookie;

         if(cookie.indexOf(this.key+"=")!=-1){

            if(!confirm("欲保存的cookie名稱已經存在,是否要進行替換?")){

                this.init();

                return false;

            }

         }

         var dt=new Date();

         dt.setTime(dt.getTime()+this.expires);

        document.cookie=this.key+"="+this.value+";expires="+dt.toGMTString();

         this.init();

        return true;

     }

 

     this.get=function(key){//取得名爲key的cookie的值

        if(key==""||key.match(/[,; ]/)){

            alert("請正確設置欲查找的cookie名稱!")

            return false;

         }

         var cookie=document.cookie;

         var start=cookie.indexOf(key+"=");

        if(start==-1){

            alert("欲查找的cookie不存在!")

            return false;

         }

         var end=cookie.indexOf(";",start);

        if(end==-1)end=cookie.length;

         var getCookie=cookie.substring(start+key.length+1,end);

        alert("cookie:"+key+"的值爲"+getCookie);

        return getCookie;

     }

     this.showAll=function(){//顯示所有cookie

        alert("共有以下cookie對:/n"+document.cookie.split(";").toString().replace(/,/g,"/n"));

     }

     this.del=function(key){//刪除名爲key的cookie

        if(key==""||key.match(/[,; ]/)){

            alert("請正確設置欲刪除的cookie名稱!")

            return false;

         }

         var dt=new Date();

         dt.setTime(dt.getTime());

         document.cookie=key+"=eyunDelete;expires="+dt.toGMTString();

         this.init();

        return true;

     }

     this.destroy=function(){//銷燬所有cookie

         var dt=new Date();

         dt.setTime(dt.getTime());

        while(document.cookie!=""){

            document.cookie=document.cookie+";expires="+dt.toGMTString();

            this.init();

            return true;

         }

     }

}

var cookieTest=new eyunCookie()

function settest(){

     cookieTest.key="test"

     cookieTest.value="ok"

     cookieTest.expires=31536000000

     cookieTest.set()

}

</script>

 

<input type=button οnclick=cookieTest.showAll() value=read>

<input type=button οnclick="cookieTest.set('a','test',31536000000)" value=setA>

<input type=button οnclick="settest();" value=setTest>

<input type=button οnclick="cookieTest.destroy()" value=clear>

<input type=button οnclick=cookieTest.get("test") value=gettest>

<input type=button οnclick=cookieTest.get("a") value=geta>

<input type=button οnclick=cookieTest.set("test",1,31536000000) value=resetTest>

<input type=button οnclick=cookieTest.del("test") value=delTest>

發佈了4 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章