1. 程式人生 > >js操作cookie的類

js操作cookie的類

 <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?",":"")+_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>