Cookie介紹
阿新 • • 發佈:2017-10-03
ges 技術分享 屬性 utf-8 創建 http協議 競爭 服務 eba
1、Http協議與Cookie
- Cookie(小量信息)是HTTP協議指定的!先由服務器保存Cookie到瀏覽器,而下次瀏覽器請求服務器時把上一次請求得到Cookie再歸還給服務器
- 由服務器創建保存到客戶端瀏覽器的一個鍵值對。服務器保存Cookie的響應頭:Set-Cookie: aaa=AAA Set-Cookie:bbb=BBB
- response.addHeader("Set-Cookie","aaa=AAA");response.addHeader("Set-Cookie","bbb=BBB");
- 當瀏覽器請求服務器時,會把該服務器保存的Cookie隨請求發送給服務器。瀏覽器歸還Cookie的請求頭:Cookie:aaa=AAA;bbb=BBB
- Http協議規定(保證不給瀏覽器太大壓力):
- 1個Cookie最大4kb
- 1個服務器最多向一個瀏覽器保存20Cookie
- 1個瀏覽器最多可以保存300個Cookie
瀏覽器大戰:因為瀏覽器競爭激烈,所以很多瀏覽器都會在移動服務內違反HTTP規定,但也不會讓一個Cookie為4GB。
2、Cookie的用途
- 服務器使用Cookie來跟蹤客戶端狀態!
- 保存購物車(購物車中的商品不能使用request保存,因為它是一個用戶向服務器發送的多個請求信息)
- 顯示上次登錄名(也是一個客戶多個請求)
- Cookie是不能跨瀏覽器的。
3、JavaWeb中使用Cookie
- 原始方式:
- 使用response發送Set-Cookie響應頭
- 使用request獲取Cookie請求頭
- 便捷方式:
- 使用response.addCookie()方法向瀏覽器保存Cookie
- 使用request.getCookie()方法獲取瀏覽器歸還的Cookie
案例:一個jsp保存cookie,a.jsp
另一個jsp獲取瀏覽器歸還的cookie,b.jsp
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
2 <html>
3 <head>
4 <title>Title</title>
5 </head>
6 <body>
7 <h1>保存Cookie</h1>
8 <%-- request、response、session、application、pageContext、config、out、page、exception--%>
9 <%
10 Cookie cookie1 = new Cookie("aaa","AAA");
11 response.addCookie(cookie1);
12 Cookie cookie2 = new Cookie("bbb","BBB");
13 response.addCookie(cookie2);
14 %>
15 </body>
16 </html>
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
2 <html>
3 <head>
4 <title>Title</title>
5 </head>
6 <body>
7 <h1>獲取Cookie</h1>
8 <%
9 Cookie[] cookies = request.getCookies();
10 if(cookies!=null){
11 for(Cookie c : cookies) {
12 out.println(c.getName()+":"+c.getValue()+"<br/>);
13 }
14 }
15 %>
16 </body>
17 </html>
4、Cookie詳解
- Cookie不只是name和value兩個屬性 Cookie的maxAge:Cookie的最大生命,即Cookie可保存的最大時長,以秒為單位,例如:cookie.setMaxAge(60)表示這個Cookie會被瀏覽器保存到客戶端硬盤上,有效時長60秒。
- maxAge>0:瀏覽器會把Cookie保存到客戶端硬盤上,有效時長為maxAge的值決定
- maxAge<0:Cookie只在瀏覽器內存中存在,當用戶關閉瀏覽器時,瀏覽器進程結束,同時Cookie也就死亡。
- maxAge=0:瀏覽器會馬上刪除這個Cookie。
- Cookie的path:
- Cookie的path並不是設置這個Cookie在客戶端的保存路徑
- Cookie的path由服務器創建Cookie時設置
- 但瀏覽器訪問服務器某個路徑時,需要歸還哪些Cookie給服務器呢?這由Cookie的path決定。
- 瀏覽器訪問服務器的路徑,如果包含某個Cookie的路徑,那麽就會歸還這個Cookie。
- 例如:
- aCookie.path=/day11_1/;bCookie.path="/day11_1/jsps/"; cCookie.path=/day11_1/jsps/cookie;
- 訪問:/day11_1/index.jsp時,歸還:aCookie。
- 訪問:/day11_1/jsps/a.jsp時,歸還:aCookie、bCookie。
- 訪問:/day11_1/jsps/cookie/b.jsp時,歸還:aCookie、bCookie、cCookie。
- Cookie的path默認值:當前訪問路徑的父路徑。例如在訪問/day11_2/jsps/a.jsp時,響應的cookie,那麽這個cookie的默認path為/day11_1/jsps/
- Cookie的domain
- domain用來指定Cookie的域名,當多個二級域中共享Cookie時才有用。
- 例如:www.baidu.com、zhidao.baidu.com、news.baidu.com、tieba.baidu.com之間共享Cookie時使用domain
- 設置domain為:cookie.setDomain(".baidu.com");
- 設置path為:cookie.setPath("/");
Cookie介紹