首页 > 技术文章 > 浏览器存储:cookie

zhuifeng 2014-07-21 00:37 原文

Cookie是什么:cookie是指存储在用户本地终端上的数据,同时它是与具体的web页面或者站点相关的。Cookie数据会自动在web浏览器和web服务器之间传输,也就是说HTTP请求发送时,会把保存在该请求域名下的所有cookie值发送给web服务器,因此服务器端脚本是可以读、写存储在客户端的cookie的操作。

 

cookie的有效期:cookie默认情况下的有效期是很短暂的,一旦用户关闭浏览器,cookie保存的数据就会丢失。如果想要延长cookie的有效期,可以通过设置HTTP头信息中的cache-control属性的max-age值,或者修改HTTP头信息中的expires属性的值来延长有效期。

 

cookie的作用域:它是通过文档源和文档路径来确定的。该作用域通过cookie的path和domain属性也是可配置的。默认情况下,cookie和创建它的web页面有关,并对该页面以及和该页面同目录或者子目录的其他页面可见。有时候,你可能希望让整个网站都能够使用cookie的值,而不管是哪个页面创建它。要满足这样的需求可以设置cookie的路径(设置cookie的path属性。例如,如果http://www.csh.com/cat/index.html页面创建了一个cookie,并且利用path属性将该路径设置成”/”,那么该cookie对任何http://www.csh.com这台web服务器上的页面都是可见的)。cookie的作用域默认由文档源限制。但是,有的大型网站想要子域之间能够互相共享cookie(例如,www.csh.com域名的的服务器想要读取mmm.csh.com域下设置的cookie值,这就需要通过设置cookie的domain属性来达到目的)。

 

cookie的数目和大小的限制:每个web服务器(域名)保存的cookie数不能超过50个,每个cookie保存的数据不能超过4KB,如果超过了4KB,服务器会处理不了。

 

//添加新的cookie
function addCookie(objName,objValue,objHours){
    var str = objName + "=" + escape(objValue);
        
       //为0时不设定过期时间,浏览器关闭时cookie自动消失    
        if(objHours > 0){
        var date = new Date();
        var ms = objHours*3600*1000;
        date.setTime(date.getTime() + ms);
        str += "; expires=" + date.toString();
    }
    document.cookie = str;
};
        

 

//获取指定名称的cookie的值
function getCookie(objName){
    var arrStr = document.cookie.split("; ");
    for(var i = 0;i < arrStr.length;i ++){
        var temp = arrStr[i].split("=");
        if(temp[0] == objName) return unescape(temp[1]);
    }
};

 

//为了删除指定名称的cookie,可以将其过期时间设定为一个过去的时间
function delCookie(name){
    var date = new Date();
    date.setTime(date.getTime() - 10000);
    document.cookie = name + "=a; expires=" + date.toString();
};

推荐阅读