Cookie

一直都有听说Cookie,但是本渣渣只是个刚入门的小水货,最近正好有j2ee的课 ,就好好看看Cookie 顺便做个笔记.(师从姜国海,哈哈哈)

1.Cookie创建

CookieString name, String value乍一看,cookie挺像map集合的 ,一样都是名值对。

Cookie c = new Cookie("user","psw");

注意的是:cookie一旦被创建,cookie的名字就不能改变。

Cookies[]cs=request.getCookies();

response.addCookie(c);

2.基本函数

clone() 

public java.lang.Object clone() 返回一个cookie副本。

注意的是,copy返回的是object ,要强制转换哦!

Cookie c = new Cookie("user","psw");

Cookie a =(Cookie) c.clone();


setVersion(int v) getVersion()

public void setVersion(int v)

设置cookie 协议的版本 ,v的取值是01

public int getVersion()

获cookie的版本号。Version 0 original Netscape cookie specification. Version 1RFC 2109.

API中说 RFC 2109有点新 ,试用的样子,所以做产品项目时候还是别用啦~

Cookie c =new Cookie("name ","ss");

int i =c.getVersion();


setSecure(boolean flag)和getSecure()

public void setSecure(boolean flag)

public boolean getSecure()

设置cookie是否只是在安全协议下才会被发送(如httpsssl),默认值是false,也就是在任何协议下都可以发送cookie

Cookie c =new Cookie("a","a");
c.setSecure(true);



setHttpOnly(boolean isHttpOnly)isHttpOnly()

public void setHttpOnly(boolean isHttpOnly)

public boolean isHttpOnly()

如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。


setComment(String purpose)和 getComment()

public void setComment(java.lang.String purpose)

public java.lang.String getComment()

是对Cookie设置Comment,传入的String就是对Cookie作用的描述,这样就可以知道相应的cookie是干什么用的啦,如果没有进行setcomment,则getComment()返回null


getName()

public java.lang.String getName()

获取cookie的名字,cookie的名字一旦创建就不能更改。


setValue(String newValue)getValue()

public void setValue(java.lang.String newValue)

public java.lang.String getValue()

cookievalue是可以更改,每次setValueString v)就是重新设置value的值,

需要注意的是,如果我们想要存二进制的值,需要用base64编码进行转换。


setMaxAge(int expiry)  getMaxAge()

public void setMaxAge(int expiry)见文知义 int 参数 expiry 表示的就是cookie 最大有效期时长(单位秒),

expiry 是正数,表示设置cookie最大的有效时长,

expiry 0,表示删除cookie

expiry 是负数,表示不会一直存着cookie,当浏览器关闭的时候,就会删除掉cookie

public int getMaxAge() 则对应着返回cookie的有效时长,要注意的是,如果返回的是负数,那么表示的是cookie会一直存在直到关闭浏览器。

  1.  // 设置Cookie立即失效  
  2.  cookie.setMaxAge(0);  
  3.  /** 
  4.   * 删除Cookie时,只设置maxAge=0将不能够从浏览器中删除cookie, 
  5.   * 因为一个Cookie应当属于一个path与domain,所以删除时,Cookie的这两个属性也必须设置。 
  6.   *  
  7.  * 误区:刚开始时,我没有发现客户端发送到服务器端的cookie的path与domain值为空这个问题。 
  8.  * 因为在登陆系统时,我设置了Cookie的path与domain属性的值,就误认为每次客户端请求时,都会把Cookie的 
  9.  * 这两个属性也提交到服务器端,但系统并没有把path与domain提交到服务器端(提交过来的只有Cookie的key,value值)。 
  10.                     */  
  11.   // 重点是这里1,必须设置domain属性的值  
  12.   cookie.setDomain(domain);  
  13.   // 重点是这里2,必须设置path属性的值  
  14.   cookie.setPath(path);  
  15.   response.addCookie(cookie); 


setPath(String uri)和getPath()

public void setPath(java.lang.String uri)

public java.lang.String getPath()

假如说我们有多个webapp,分别是webapp_awebapp_b。正常情况下的cookie,只能在一个webapp中共享。也就是说,哪个webapp创建了这个cookie,哪个webapp才能获得并使用这个cookie

setPath(String uri):设置了能够获取此cookie的应用的路径,这样一来,这个cookie就可以在一个服务器下的多个webapp间共享了。

要点说明:

1.原本,在webapp_a下面newcookie,在webapp_b下面是获取不到,因为cookiePath默认值是产生cookie的应用的路径,也就是"/webapp_a/"

2.,webapp_a下面new一个cookie的时候,增加一条cookie.setPath("/");或者cookie.setPath("/webapp_b/"); 


这样就可以在webapp_b下面获取到webapp_a中设置的cookie了。 
3. 此处的参数uri,是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp),因此 cookie.setPath("/");之后,webapp文件夹下的所有应用都可以共享cookie,而cookie.setPath(" /webapp_b/"); 


是指这个cookie只能在webapp_b应用下的获得,即便产生这个cookie是webapp_a,webapp_a也无法获得。

4. 同上,设置cookie.setPath("/webapp_b/jsp")或者cookie.setPath("/webapp_b/jsp/")的时 候,只有在webapp_b/jsp下面可以获得cookie,在webapp_b下面但是在jsp文件夹外的都不能获得cookie。

5.有多条cookie.setPath("XXX")语句的时候,以最后一条为准。 

public String getPath()则是返回cookie应用的path



setDomain(String domain)和 getDomain()

//这部分写的不好,抄网上的,自己也没怎么实践,先大概看看,之后再实践实践,写出自己的

可以看看这个   http://blog.csdn.net/ghsau/article/details/20395681

cookie是与域名绑定的,比如说A站点的cookieB站点是不能访问的,这是浏览器的同源策略限定,主要是出于安全考虑。但是,如果A站点在设置cookie时,设置了domain参数,那么这个cookie可以在domain指定的域名或子域名的站点使用。setDomain就是设置cookie能够跨域共享。

A机所在的域:home.langchao.com,A机中有应用webapp_a
B机所在的域:jszx.com,B机中有应用webapp_b
这个参数必须以“.”开始。
1)在webapp_a下面设置cookie的时候,增加cookie.setDomain(".jszx.com");,这样在webapp_b下就可以取到这个cookie。 输 入url访问webapp_b的时候,必须输入域名才能解析。比如说在A机器输入:http://lc-bsp.jszx.com:8080 /webapp_b,可以获取刚才在webapp_a客户端中设置的cookie,而B机器访问本机的应用,输入:http: //localhost:8080/webapp_b则不可以获得cookie。 
2)A机设置了cookie.setDomain(".jszx.com");,还可以在默认的home.langchao.com下面共享


关于cookie小问题 http://www.educity.cn/wenda/100626.html




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值