首页 » 编写高质量代码:改善JavaScript程序的188个建议 » 编写高质量代码:改善JavaScript程序的188个建议全文在线阅读

《编写高质量代码:改善JavaScript程序的188个建议》建议157:推荐封装Cookie应用接口

关灯直达底部

在默认状态下,存取Cookie信息是比较麻烦的。由于Cookie是通过字符串来存取信息的,所以容易导致在执行赋值运算时需要转换读取信息的数据类型。另外,烦琐的构造和解析Cookie信息字符串本身就令人生厌,在经常使用Cookie信息的Web应用中格外不便。因此,建议读者在进行Web开发前,封装Cookie以便能够提高开发效率。

Cookie封装的原则:接口高度统一,参数自由、灵活。Cookie存取功能比较强大,具体包括写入、读取和删除Cookie信息,能够满足日常开发的需要。下面介绍一下Cookie封装的具体设计思路。

定义函数Cookie,利用该函数既可以写入指定的Cookie信息,删除指定的Cookie信息,也能够读取指定名称的Cookie值,另外,在该函数中还可以指定Cookie信息的有效期、有效路径、作用域和安全性选项设置。如果在调用Cookie函数时,仅指定一个参数值,则表示读取指定名称的Cookie值;如果指定两个参数,则表示写入Cookie信息,其中第一个参数表示名称,第二个参数表示值。在第三个参数中还可以传递选项信息,这些信息以字典形式存储在对象中进行传递。前两个参数以字符串形式进行传递。完整的封装代码如下:


//封装Cookie存取功能,可以写入Cookie信息,读取Cookie信息,也可以删除Cookie信息

/*参数:name表示Cookie的名称,value表示Cookie值,都以字符串形式传递。options参数是一个对象,该对象可以包含多项信息,用来指定Cookie信息的有效期、路径、作用域和完全性设置*/

//返回值:当仅有一个参数时,该函数获读取并返回Cookie值

function Cookie(name,value,options){

if(typeof value!='undefined'){//如果第二个参数存在

options=options||{};

if(value===null){

options.expires=-1;//设置失效时间

}

var expires='';

//如果存在时间参数项,并且类型为number,或者具体时间,那么分别设置时间

if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){

var date;

if(typeof options.expires=='number'){

date=new Date;

date.setTime(date.getTime+(options.expires*24*60*60*1000));

}

else{

date=options.expires;

}

expires=';expires='+date.toUTCString;

}

var path=options.path?';path='+options.path:'';//设置路径

var domain=options.domain?';domain='+options.domain:'';//设置域

var secure=options.secure?';secure':'';//设置安全措施,为true则直接设置,

否则为空

//把所有字符串信息都存入数组,然后调用join方法转换为字符串,并写入Cookie信息

document.Cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');

}

else{//如果第二个参数不存在,则表示读取指定Cookie信息

var CookieValue=null;

if(document.Cookie&&document.Cookie!=''){

var Cookie=document.Cookie.split(';');

for(var i=0;i<Cookies.length;i++){

var Cookie=(Cookies[i]||"").replace(/^/s+|/s+$/g,"");

if(Cookie.substring(0,name.length+1)==(name+'=')){

CookieValue=decodeURIComponent(Cookie.substring

(name.length+1));

break;

}

}

}

return CookieValue;//返回查找的Cookie值

}

}


下面是关于该封装函数的应用示例。

1)写入Cookie信息:


Cookie("user","baidu");//简单写入一条Cookie信息

Cookie("user","baidu",{//写入一条Cookie信息,并设置更多选项

expires:10,//有效期为10天

path:"/",//整个站点有效

domain:"www.css8.cn",//有效域名

secure:true//加密数据传输

});


2)读取Cookie信息:


Cookie("user")


3)删除Cookie信息:


Cookie("user",null);


通过上面代码,可以实现对Cookie信息的读写操作,这样用户就可以方便地在客户端存储简短的页面信息,避免因为在服务器端存储这些信息而增加服务器运行负担和浪费服务器端资源。