1. 程式人生 > >Cookie介紹

Cookie介紹

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介紹