功能比较完善的 cookie 操作类 附带一些简单的应用示例

2007-12-25 02:30 来源: 作者: 网友评论 0 条 浏览次数 19

  一个比较容易调用 功能比较完善的 cookie 操作类

附带一些简单的应用示例

var axtic = axtic || {};
axtic.Cookie 
= {
/*
函数名称:axtic.Cookie.Get([string name])
函数功能:得到Cookie
参数:name 可选项,要取得的Cookie名称
说明:name为空时将通过数组形式返回全部Cookie,name不为空时返回此Cookie名称的值,没有任何值时返回undefined
*/

    Get : 
function(name){
        
var cv = document.cookie.split("");//使用"; "分割Cookie
        var cva = [], cvat = [], cvam = [], temp;
        
/*循环的得到Cookie名称与值*/
        
for(i=0; i<cv.length; i++){
            temp 
= cv[i].split("=");//用"="分割Cookie的名称与值
            if(temp[0].indexOf("_divide_"> 0){
                cvam[temp[
0]] = temp[1];
            }
else{
                
if(temp[0!= "") cvat[i] = [temp[0], temp[1]];
            }

        }

        
for(i=0; i<cvat.length; i++){
            
if(cvat[i]){
                
if(cvat[i][1].substr(0,8!= "^divide|"){
                    
/*小于4K的Cookie处理*/
                    cva[cvat[i][
0]] = unescape(cvat[i][1]);
                }
else{
                    
/*大于4K的Cookie处理*/
                    
var sta = cvat[i][1].indexOf("$"), tot = cvat[i][1].substring(8,sta);
                    cva[cvat[i][
0]] = cvat[i][1].substring(sta+1);
                    
for(j=1; j<tot; j++){
                        cva[cvat[i][
0]] += cvam[cvat[i][0]+"_divide_"+j];
                    }

                    cva[cvat[i][
0]] = unescape(cva[cvat[i][0]]);
                }

            }

        }

        
if(name) return cva[name];//如果有name则输出这个name的Cookie值
        //else return cva;//如果没有name则输出以名称为key,值为Value的数组
        else return false;
    }
,
/*
函数名称:axtic.Cookie.Set(string name, string  value[, int expires[, string path[, string domain[, string secure]]]])
函数功能:存入Cookie
参数:name 必要项,要存入的Cookie名称
      value 必要项,要存入的Cookie名称对应的值
      expires 可选项,Cookie的过期时间,可以填入以秒为单位的保存时间,也可以填入日期格式(wdy, DD-Mon-YYYY HH:MM:SS GMT)的到期时间
      path 可选项,Cookie在服务器端的有效路径
      domain 可选项,该Cookie的有效域名
      secure 可选项, 指明Cookie 是否仅通过安全的 HTTPS 连接传送,0或false或空时为假
说明:保存成功则返回true,保存失败返回false
*/

    Set : 
function(name, value, expires, path, domain, secure, divide){
        
if(!divide) var value = escape(value);
        
if(!name || !value) return false;//如果没有name和value则返回false
        if(name == "" || value == ""return false;//如果name和value为空则返回false
        /*对于过期时间的处理*/
        
if(expires){
            
/*如果是数字则换算成GMT时间,当前时间加上以秒为单位的expires*/
            
if(/^[0-9]+$/.test(expires)){
                
var today = new Date();
                expires 
= new Date(today.getTime()+expires*1000).toGMTString();
            
/*判断expires格式是否正确,不正确则赋值为undefined*/
            }
else if(!/^wed, d{2} w{3} d{4} d{2}:d{2}:d{2} GMT$/.test(expires)){
                expires 
= undefined;
            }

        }

        
if(name.indexOf("_divide_")< 1 && !divide){
            
this.Del(name, path, domain);//删除前一次存入的Cookie
        }

        
/*合并cookie的相关值*/
        
var cv = name+"="+value+";"
               
+ ((expires) ? " expires="+expires+";" : "")
               
+ ((path) ? "path="+path+";" : "")
               
+ ((domain) ? "domain="+domain+";" : "")
               
+ ((secure && secure != 0? "secure" : "");
        
/*判断Cookie总长度是否大于4K*/
        
if(cv.length < 4096){
            document.cookie 
= cv;//写入cookie
        }
else{
            
/*对于大于4K的Cookie的操作*/
            
var max = Math.floor(value.length/3800)+1;
            
for(i=0; i<max; i++){
                
if(i == 0){
                    
this.Set(name, '^divide|'+max+'$'+value.substr(0,3800), expires, path, domain, secure, true);
                }
else{
                    
this.Set(name+"_divide_"+i, value.substr(i*3800,3800), expires, path, domain, secure, true);
                }

            }

        }

        
return true;
    }
,
/*
函数名称:axtic.Cookie.Del(string name[, string path[, string domain]])
函数功能:删除Cookie
参数:name 必要项,要删除的Cookie名称
      path 可选项,要删除的Cookie在服务器端的有效路径
      domain 可选项,要删除的Cookie的有效域名
说明:删除成功返回true,删除失败返回false
*/

    Del : 
function(name, path, domain){
        
if(!name) return false;//如果没有name则返回false
        if(name == ""return false;//如果name为空则返回false
        if(!this.Get(name)) return false;//如果要删除的name值不存在则返回false
        /*对于大于4K的Cookie进行处理*/
        
if(escape(this.Get(name)).length > 3800){
            
var max = Math.floor(escape(this.Get(name)).length/3800)+1;
            
for(i=1; i<max; i++){
                
/*合并Cookie的相关值,并删除*/
                document.cookie 
= name+"_divide_"+i+"=;"
                              
+ ((path) ? "path="+path+";" : "")
                              
+ ((domain) ? "domain="+domain+";" : "")
                              
+ "expires=Thu, 01-Jan-1970 00:00:01 GMT;";
            }

        }

        
/*合并Cookie的相关值,并删除*/
        document.cookie 
= name+"=;"
                          
+ ((path) ? "path="+path+";" : "")
                          
+ ((domain) ? "domain="+domain+";" : "")
                          
+ "expires=Thu, 01-Jan-1970 00:00:01 GMT;";
        
return true;
    }

}


/* 应用函数 */
//-----------------------------列表框---------------
//
保存列表框的索引到cookie
function setck(ckey,oselect)//(keyname,objSelect)
{
    axtic.Cookie.Set(ckey,oselect.selectedIndex,
86400);
}

//从cookie读取列表框的索引,移动当前选择项到此索引
function ckselect(ckey,selectid)//(keyname,SelectID)
{    
    
var sselect = document.getElementById(selectid);
    
var ckvalue = axtic.Cookie.Get(ckey);
    
if(ckvalue)
    
{
        sselect.options[ckvalue].selected 
= 1;
    }

}

//-----------------------------列表框---------------

//-----------------------------滚动条---------------
//
保存列保存滚动条的坐标
function getscroll()
{
    
var t, l, w, h;
    
if (document.documentElement && document.documentElement.scrollTop)
    
{
        t 
= document.documentElement.scrollTop;
        l 
= document.documentElement.scrollLeft;
        w 
= document.documentElement.scrollWidth;
        h 
= document.documentElement.scrollHeight;
    }
 
    
else if (document.body) 
    
{
        t 
= document.body.scrollTop;
        l 
= document.body.scrollLeft;
        w 
= document.body.scrollWidth;
        h 
= document.body.scrollHeight;
    }

    
return { t: t, l: l, w: w, h: h }
}


//取得当前纵向滚动条并保存到cookie
function scrollsave(scname,scvalue) //scrollsave('scroll',body.scrollTop);

    axtic.Cookie.Set(scname,scvalue,
86400);
    
//alert("aa");
}


//从cookie取得滚动条纵坐标并移动纵向滚动条到此坐标