您的位置:首页 > Web前端 > JavaScript

js写的操作cookies的类

2006-03-03 18:42 302 查看
方法一:

<script
language="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 in
this._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?
4000
",":"")+_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>

<script
language="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-70
00:00:01 GMT; domain=www.mydomain.com; path=/images; secure;

 

这么长的两个字符串只代表了两个Cookies。如果还要再加上电子信箱或其他信息就还得加长字符串。通常都是通过分解这样的字符串来取得各个变量或元素的。这实在是费时费力的事。

使用面向对象设计(Object
Oriented 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 onclick=cookieTest.showAll() value=read>

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

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

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

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

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

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

<input type=button onclick=cookieTest.del("test") value=delTest>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息