Cookie的用途:服務器可以從下次請求中,通過Cookie拿到上一次請求保存到Cookie的數據。
服務器使用Cookie來跟蹤客戶端狀態。服務器就是從檔次請求中通過Cookie拿到
上次請求保存到Cookie中的數據來查看客戶端狀態的。
保存購物車。購物車中的商品不能使用request對象保存,因爲一個請求對應一個request
對象,而購物車它時一個用戶(瀏覽器)向服務器發送的多次請求,所以可以利用下次請求
通過Cookie拿到上次請求保存到Cookie中歐冠的數據,來使用Cookie再次保存,以此來添加
購物車。
顯示上次登錄名。多次登錄也是一個用戶(瀏覽器)向服務器發送多次請求,所以也可以利用
下次請求通過Cookie拿到上次請求保存到Cookie中的用戶名,來獲取上次的登錄用戶名。
特點:
以上可知Cookie是保存在瀏覽器上的,且是同一(相同)瀏覽器多次請求服務器來操作Cookie
以獲得上次請求保存在Cookie中的數據的,所以Cookie是不能跨瀏覽器來操作的。
而且正因爲Cookie是保存在瀏覽器中的,所以它相對不安全。
3>JavaWeb中使用Cookie
原始方式:
>服務器使用response發送Set-Cookie響應頭向瀏覽器保存Cookie
response.addHeader("Set-Cookie","aaa=AAA");(多值)
aaa=AAA :aaa是名稱,等號後面是內容(只能這麼寫)
>服務器使用request獲取Cookie請求頭,來獲取當次請求發送的保存了上次請求
數據的Cookie。
Enumeration <String> | request.getHeaders("Cookie");(多值)
快捷方式:
>使用response.addCookie()方法向瀏覽器響應保存Cookie。
>使用request.getCookies()方法獲取當次請求發送的保存了上次請求數據的Cookie
4>Cookie的生命週期
Cookie除了name和value屬性外,還有一個maxAge:即Cookie的最大生命,
即Cookie可保存的最大時長,以秒爲單位。
1、maxAge>0:瀏覽器會把Cookie保存在客戶機硬盤上,有效時長由maxAge的值決定。
如,cookie.setMaxAge(60)表示Cookie會被瀏覽器保存在硬盤上60秒
2、maxAge<0:Cookie只在瀏覽器的運行內存中存在,當瀏覽器關閉,瀏覽器進程結束
內存銷燬時,同時Cookie被銷燬。(瀏覽器關閉時所有的相同瀏覽器關閉也就是如果你開了
三個谷歌瀏覽器,必須三個全部關掉纔算,本質上這個三個都是窗口關了只能算是關了一個
窗口)
如,cookie.setMaxAge(-1)表示瀏覽器關閉則Cookie銷燬。
3、maxAge=0:瀏覽器會馬上刪除這個Cookie
如,cookie.setMaxAge(0)瀏覽器則會立刻銷燬此Cookie。
注意:當沒有設置Cookie的maxAge屬性時默認是-1,Cookie默認只在瀏覽器內存
中存活,即瀏覽器關閉,Cookie銷燬。
5>Cookie的路徑(path屬性):
Cookie的path屬性並不是設置Cookie在客戶端的保存路徑,
而是當瀏覽器訪問服務器
的某個資源路徑時,決定是否需要給服務器歸還Cookie
當瀏覽器訪問請求服務器
的某個資源路徑時,如果次訪問路徑包含這個Cookie的path屬性設置的路徑部分時
那麼就向服務器歸還這個Cookie
Cookie的path屬性由服務器在創建Cookie時設置。
如:aCookie.setPath("/JspTest1/");
bCookie.setPath("/JspTest1/jsps/");
cCookie.setPath("/JspTest1/jsps/cookies/");
>瀏覽器訪問請求:/JspTest1/index.jsp,此訪問路徑包含了aCookie
的路徑,所以向服務器歸還aCookie
>瀏覽器訪問請求:/JspTest1/jsps/a.jsp,此訪問路徑把aCookie和
bCookie的路徑都包含所以向服務器歸還
aCookie和bCookie
>瀏覽器訪問請求:/JspTest1/jsps/cookies/b.jsp,此訪問路徑把
aCookie和bCookie和cCookie的路徑都包含,所以向服務器歸還:
aCookie、bCookie、 cCookie
意思就是說只要包含訪問請求路徑含有setpath中參數就返回調用者
如aCookie的的路徑(setpath),訪問路徑包含則歸還aCookie
創建的Cookie沒有設置path屬性時,此Cookie的默認路徑就是,當前請求
訪問路徑的父路徑。如,當請求訪問/JspTest1/cookies2/c.jsp,服務器創建並向瀏覽器
響應一個Cookie,那麼此Cookie的默認路徑就是/JspTest1/cookies2/
6>Cookie的域(domain屬性)
Cookie的domain用於指定Cookie的域名,當多個二級域之間共享同一Cookie時使用
例如:在www.baidu.com
zhidao.baidu.com
news.baidu.com
tieba.baidu.com
4個域請求之間共享同一Cookie
1>設置此Cookie的domain爲:cookie。setDomain(“.baidu.com”);
2>必須設置此Cookie的path:cookie.setPath("/");
可在同一應用服務器內共享設置爲/的話
因爲域名封裝了請求的項目路徑,所以使用域名請求服務器沒有項目名,
也就沒有辦法給Cookie設置具體的路徑,所以必須使用“/”通配所有請求路徑,否則多個域名
請求之間無法傳遞共享同一個Cookie
//創建Cookie
Cookie ck -
//設置Cookie的域(domain屬性)爲“.baidu.com”;
ck.setDomain(".baid.com");
//設置Cookie路徑(path屬性)爲“/”
ck.setPath("/");
//向瀏覽器響應Cookie
response.addCookie(ck);向客戶端添加Cookie