要把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大小超過限制都被忽略,且永遠不會被設置。
![讀取Cookie及Cookie全部屬性操做方法,Cookie大小](http://static.javashuo.com/static/loading.gif)
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,容易誤操做。(固然前提是域名相同)