cookie工作原理

一,cookie简介

        Cookie是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和盘Cookie。内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。而硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie。

二,cookie常用属性   

    Domain:域,表示当前cookie所属于哪个域或子域下面。只有访问该cookie所属于的域名时,才会带上该cookie信息至服务端。例如:设置Domain为"pandan.xyz"二级域名,那么浏览器访问www.pandan.xyz和bbs.pandan.xyz等三级域名时,都会带上该cookie信息。

    Path:路径,表示cookie的所属路径。默认为"/",访问cookie所属的路径时,请求才会带上该cookie信息。

    Secure:表示该cookie只能用https传输。一般用于包含认证信息的cookie,要求传输此cookie的时候,必须用https传输。如果此值设置为true而网络协议是http非安全协议,请求是不会带上该cookie信息的。

    HttpOnly:表示浏览器js脚本不能读取该cookie信息。可以有效的防止xss攻击。

    Expires/Max-Age:表示cookie的过期时间。Expires是过期日期(绝对时间),Max-Age是相对时间(相对于当前时间的毫秒数)。

三,应用举例

  

/**向客户端写cookie信息的方式1*/
  Cookie c = new Cookie(name, value);
  c.setPath("/");
  c.setDomain(".pandan.xyz");
  c.setMaxAge(maxAge);//0表示清除客户端cookie信息,-1(小于0)表示会话cookie,大于0持久化cookie
  response.addCookie(c);

/**向客户端写cookie信息的方式2*/
  StringBuilder sb = new StringBuilder();
  sb.append(name).append("=").append(value).append(";");
  sb.append("Domain=").append(".pandan.xyz").append(";");
  if(maxAge >= 0){
      sb.append("Max-Age=").append(maxAge).append(";");//maxAge:相对时间(毫秒数),Max-Age对于IE浏览器不支持,要设置Expires属性
  }
  sb.append("Path=/;");
  sb.append("HttpOnly;");
  response.setHeader("Set-Cookie", sb.toString());

 
  对于servlet3.0以下的版本是没有设置httpOnly属性的方法的,只能通过方式二进行cookie httpOnly属性的设置,servlet容器将方式一设置的cookie信息,最终还是以方式二的方式输出给浏览器的。

 

 

你可能感兴趣的:(servlet->基础)