首页 > 代码库 > 读取Cookie及Cookie所有属性操作方法

读取Cookie及Cookie所有属性操作方法

读取Cookie及Cookie所有属性操作方法  

2013-08-04 22:21:43|  分类: 技术 |  标签:cookie  |举报|字号 订阅


 

    要把Cookie发送到客户端,Servlet先要调用new Cookie(name,value)用合适的名字和值创建一个或多个Cookie,通过cookie.setXXX设置各种属性,通过response.addCookie(cookie)把cookie加入应答头。

  要从客户端读入Cookie,Servlet应该调用request.getCookies(),getCookies()方法返回一个Cookie 对象的数组。在大多数情况下,你只需要用循环访问该数组的各个元素寻找指定名字的Cookie,然后对该Cookie调用getValue方法取得与指定 名字关联的值。

 

一、浏览器允许每个域名所包含的cookie数:

  Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但IE7似乎也允许每个域名50个cookie

  Firefox每个域名cookie限制为50个。

  Opera每个域名cookie限制为30个。

  Safari/WebKit貌似没有cookie限制。但是如果cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。

  注:“每个域名cookie限制为20个”将不再正确!

二、当很多的cookie被设置,浏览器如何去响应。

  除Safari(可以设置全部cookie,不管数量多少),有两个方法:

  最少最近使用(leastrecentlyused(LRU))的方法:当Cookie已达到限额,自动踢除最老的Cookie,以使给最新的Cookie一些空间。InternetExplorer和Opera使用此方法。

  Firefox很独特:虽然最后的设置的Cookie始终保留,但似乎随机决定哪些cookie被保留。似乎没有任何计划(建议:在Firefox中不要超过Cookie限制)。

三、不同浏览器间cookie大小也不同:

  Firefox和Safari允许cookie多达4097个字节,包括名(name)、值(value)和等号。

  Opera允许cookie多达4096个字节,包括:名(name)、值(value)和等号。

  InternetExplorer允许cookie多达4095个字节,包括:名(name)、值(value)和等号。

注:多字节字符计算为两个字节。在所有浏览器中,任何cookie大小超过限制都被忽略,且永远不会被设置。

 

 

 读取Cookie及Cookie所有属性操作方法,Cookie大小

 

1.设置Cookie  

Cookie cookie = new Cookie("key", "value");  
cookie.setMaxAge(60);  

设置60秒生存期,如果设置为负值的话,则为浏览器进程Cookie(内存中保存),关闭浏览器就失效。  

cookie.setPath("/test/test2");  

设置Cookie路径,不设置的话为当前路径(对于Servlet来说为request.getContextPath() + web.xml里配置的该Servlet的url-pattern路径部分)  

response.addCookie(cookie);  

2.读取Cookie  

该方法可以读取当前路径以及“直接父路径”的所有Cookie对象,如果没有任何Cookie的话,则返回null  

Cookie[] cookies = request.getCookies();  

3.删除Cookie  

Cookie cookie = new Cookie("key", null);  

cookie.setMaxAge(0);  

设置为0为立即删除该Cookie  

cookie.setPath("/test/test2");  

删除指定路径上的Cookie,不设置该路径,默认为删除当前路径Cookie  

response.addCookie(cookie);  

4.注意:假设路径结构如下  

test/test2/test345/test555/test666  


a.相同键名的Cookie(值可以相同或不同)可以存在于不同的路径下。  

b. 删除时,如果当前路径下没有键为"key"的Cookie,则查询全部父路径,检索到就执行删除操作(每次只能删除一个与自己最近的父路径Cookie)  

FF.必须指定与设定cookie时使用的相同路径来删除改cookie,而且cookie的键名不论大写、小写或大小混合都要指定路径。  

IE.键名小写时,如果当前路径为/test/test2,如果找不到再向上查询/test、/test555、/test345,如果还找不到就查询/ 。(/test555/test666不查询)  

键名大小写混合或大写时,不指定路径则默认删除当前路径,并且不向上查询。  

c.读取Cookie时只能读取直接父路径的Cookie。  

如果当前路径为/test/test2,要读取的键为"key"。当前路径读取后,还要读取/test,/test读取后,还要读取/  

d.在做Java的web项目时,由于一般的Web服务器(如Tomcat或Jetty)都用Context来管理不同的Web Application,这样对于每个Context有不同的Path,  

在一个Server中有多个Web Application时要特别小心,不要设置Path为/的Cookie,容易误操作。(当然前提是域名相同)

 评论这张