cookie概述
cookie是浏览器提供的一种机制,它将document 对象的cookie属性提供给JavaScript。可以由JavaScript对其进行控制,而并不是JavaScript本身的性质。cookie是存于用户硬盘的一个文件,这个文件通常对应于一个域名,当浏览器再次访问这个域名时,便使这个cookie可用。因此,cookie可以跨越一个域名下的多个网页,但不能跨越多个域名使用。
不同的浏览器对cookie的实现也不一样,但其性质是相同的。例如在Windows 2000以及Windows xp中,cookie文件存储于documents and settings\userName\cookie\文件夹下。通常的命名格式为:userName@domain.txt。
cookie机制将信息存储于用户硬盘,因此可以作为全局变量,这是它最大的一个优点。它可以用于以下几种场合。
(1)保存用户登录状态。例如将用户id存储于一个cookie内,这样当用户下次访问该页面时就不需要重新登录了,现在很多论坛和社区都提供这样的功能。 cookie还可以设置过期时间,当超过时间期限后,cookie就会自动消失。因此,系统往往可以提示用户保持登录状态的时间:常见选项有一个月、三个 月、一年等。
(2)跟踪用户行为。例如一个天气预报网站,能够根据用户选择的地区显示当地的天气情况。如果每次都需要选择所在地是烦琐的,当利用了 cookie后就会显得很人性化了,系统能够记住上一次访问的地区,当下次再打开该页面时,它就会自动显示上次用户所在地区的天气情况。因为一切都是在后 台完成,所以这样的页面就像为某个用户所定制的一样,使用起来非常方便。
(3)定制页面。如果网站提供了换肤或更换布局的功能,那么可以使用cookie来记录用户的选项,例如:背景色、分辨率等。当用户下次访问时,仍然可以保存上一次访问的界面风格。
(4)创建购物车。正如在前面的例子中使用cookie来记录用户需要购买的商品一样,在结账的时候可以统一提交。例如淘宝网就使用cookie记录了用户曾经浏览过的商品,方便随时进行比较。
当然,上述应用仅仅是cookie能完成的部分应用,还有更多的功能需要全局变量。cookie的缺点主要集中于安全性和隐私保护。主要包括以下几种:
(1)cookie可能被禁用。当用户非常注重个人隐私保护时,他很可能禁用浏览器的cookie功能;
(2)cookie是与浏览器相关的。这意味着即使访问的是同一个页面,不同浏览器之间所保存的cookie也是不能互相访问的;
(3)cookie可能被删除。因为每个cookie都是硬盘上的一个文件,因此很有可能被用户删除;
(4)cookie安全性不够高。所有的cookie都是以纯文本的形式记录于文件中,因此如果要保存用户名密码等信息时,最好事先经过加密处理。
/*添加cookie*/
function setCookie(name,value,outTime){var expdate=new Date();
var outms=outTime*24*60*60*1000;//过期时间,以天为单位‘1’表示一天
expdate.setTime(expdate.getTime()+outms);
var cookieStr=name+"="+escape(value)+";expires="+expdate.toGMTString();
//escape方法的作用是进行编码,主要防治value中有特殊字符
document.cookie=cookieStr;
}
/*删除cookie
cookie的删除并不是物理意义上的直接删除,
而是将cookie的有效期设置为失效,然后由浏览器删除失效的cookie删除
*/
function deleteCookie(cookiename){
var date = new Date();
var outTime=date.getTime()-1000;//将cookie的有效期设置为失效
date.setTime(outTime);
document.cookie=cookiename+"='';expires="+date.toGMTString();
}
/*读取cookie*/
function getCookie(cookieName){
var cookieStr=document.cookie;
var cookievalue="";
if(cookieStr!=null &&cookieStr!=undefined){
var arrayCookie=cookieStr.split(';');
for(var i=0;i<arrayCookie.length;i++){
var arrayDetail=arrayCookie[i].split('=');
if(i==0){
cookiMap='{"'+arrayDetail[0]+'":"'+arrayDetail[1]+'",';
}else if(i==arrayCookie.length-1){
cookiMap+='"'+arrayDetail[0]+'":"'+arrayDetail[1]+'"}';
}else{
cookiMap+='"'+arrayDetail[0]+'":"'+arrayDetail[1]+'",';
}
}
}
var s=cookiMap.replace(/\s/g,"");//去掉空格
var cookieObj=JSON.parse(s);
for(var item in cookieObj){
if(item==cookieName){
cookievalue=unescape(cookieObj[item]);
}
}
return cookievalue;
}
window.οnlοad=function(){
var jsonObj={"姓名":"丁**","年龄":"24","职业":"程序员"}
setCookie("abc",JSON.stringify(jsonObj),2);//在cookie中写入json串
setCookie("abd","hello word",2);// 写入cookie
setCookie("abe","边城;阿贾克斯",2);
var s={'abc':'{"姓名":"丁**","年龄":"24","职业":"程序员"}','abd':'hello word','abe':'编程;阿贾克斯'};
deleteCookie('abe'); //删除cookie
alert(getCookie('abe'));//根据key值获取cookie
}