要把Cookie发送到客户端,Servlet先要调用new Cookie(name,value)用合适的名字和值建立一个或多个Cookie,经过cookie.setXXX设置各类属性,经过response.addCookie(cookie)把cookie加入应答头。web
要从客户端读入Cookie,Servlet应该调用request.getCookies(),getCookies()方法返回一个Cookie 对象的数组。在大多数状况下,你只须要用循环访问该数组的各个元素寻找指定名字的Cookie,而后对该Cookie调用getValue方法取得与指定 名字关联的值。数组
1、浏览器容许每一个域名所包含的cookie数:浏览器
Microsoft指出InternetExplorer8增长cookie限制为每一个域名50个,但IE7彷佛也容许每一个域名50个cookie。服务器
Firefox每一个域名cookie限制为50个。cookie
Opera每一个域名cookie限制为30个。tcp
Safari/WebKit貌似没有cookie限制。可是若是cookie不少,则会使header大小超过服务器的处理的限制,会致使错误发生。ide
注:“每一个域名cookie限制为20个”将再也不正确!post
2、当不少的cookie被设置,浏览器如何去响应。url
除Safari(能够设置所有cookie,无论数量多少),有两个方法:
最少最近使用(leastrecentlyused(LRU))的方法:当Cookie已达到限额,自动踢除最老的Cookie,以使给最新的Cookie一些空间。InternetExplorer和Opera使用此方法。
Firefox很独特:虽然最后的设置的Cookie始终保留,但彷佛随机决定哪些cookie被保留。彷佛没有任何计划(建议:在Firefox中不要超过Cookie限制)。
3、不一样浏览器间cookie总大小也不一样:
Firefox和Safari容许cookie多达4097个字节,包括名(name)、值(value)和等号。
Opera容许cookie多达4096个字节,包括:名(name)、值(value)和等号。
InternetExplorer容许cookie多达4095个字节,包括:名(name)、值(value)和等号。
注:多字节字符计算为两个字节。在全部浏览器中,任何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、/test55五、/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,容易误操做。(固然前提是域名相同)