cookie知识总结

435 阅读3分钟

转载自:

设置存储和过期时间

cookie和session机制详解

http技能之cookie

cookie属性

maxAge:设置cookie的有效期

  • 大于0:表示将当前cookie保存在硬盘上,保存时间由其参数决定
  • 小于0:无论该方法的参数是多少,只要小于0,则表示将当前cookie保存在浏览器内存中,浏览器关闭的同时cookie删除;
  • 等于0:表示浏览器将当前cookie及之前保存的同名cookie删除

Expires

定义了一个指定的日期和时间,到了这个日期或时间时,浏览器应该删掉cookie。日期和时间的指定格式是Wdy, DD Mon YYYY HH:MM:SS GMT或者Wdy, DD Mon YY HH:MM:SS GMT,其中YY的值大于等于0小于等于69。

  • 例子 下面就是一个当用户登录之后从站点接收到的三个Set-Cookie头的例子:
HTTP/1.0 200 OK
Set-Cookie: lu=Rg3vHJZnehYLjVg7qi3bZjzg; Expires=Tue, 15 Jan 2013 21:47:38 GMT; Path=/; Domain=.example.com; HttpOnly
Set-Cookie: made_write_conn=1295214458; Path=/; Domain=.example.com
Set-Cookie: reg_fb_gate=deleted; Expires=Thu, 01 Jan 1970 00:00:01 GMT; Path=/; Domain=.example.com; HttpOnly

第一个cookie,lu被设置在2013年1月15日过期。它会被浏览器一直用到那个设置的时间。第二个cookie,made_write_com没有设置有效期,所以它是个session cookie,当用户关闭浏览器时,会删除这个cookie。第三个cookie,reg_fb_gate值被改成了"deleted",并且有一个过去的有效期。浏览器会删除这个cookie,因为它的有效期已经过去了。注意只有'Set-Cookie'中的domain和path属性匹配cookie被创建时的值时,才能被删除

Domain和Path属性定义了cookie的范围

  • Path: 该Cookie的使用路径。如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”
  • domain: 可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”

本质上是告诉浏览器cookie属于哪个站点。为了明显的安全原因,cookie只能在当前资源的顶级域名或者子级域名上设置,不能再其他域名和对应的子级域名上设置。例如,example.org站点不能设置一个domain是foo.com的cookie,因为不会允许example.org站点去控制foo.com的cookie。

Secure和HttpOnly

  • secure: 该Cookie是否仅被使用安全协议传输。安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false
  • HttpOnly属性指示浏览器除了HTTP/HTTPS请求之外不要显示cookie。这意味着这种cookie不能在客户端通过脚本获取,因此也不会轻易的被跨站脚本窃取

设置过期时间

//写入cookie到主域,设置过期时间为一年
function SetCookie(name, value) {
    console.log(name, value)
    var str = name + "=" + escape(value) + ";domain=.cnblogs.com;path=/";
    var date = new Date();
    //设置date为当前时间加一年
    date.setTime(date.getTime() + 365 * 24 * 60 * 60 * 1000); 
    //expires添加时间
    str += ";expires=" + date.toUTCString();
    console.log(str)
    document.cookie = str;
}

获取cookie的值

function cookie(name){    
   var cookieArray=document.cookie.split("; ");     
   var cookie=new Object();    
   for (var i=0;i<cookieArray.length;i++){    
      var arr=cookieArray[i].split("=");          
      if(arr[0]==name)return arr[1];    
   } 
   return ""; 
}

删除cookie

//删除cookie
function delCookie(name){
   document.cookie = name+"=;expires="+(new Date(0)).toUTCString();
}