JavaWeb|淺談Cookie

  • 2019 年 11 月 28 日
  • 筆記

問題描述

1 什麼是Cookie

Cookie,有時也用其複數形式 Cookies。類型為「小型文本文件」,是某些網站為了辨別用戶身份,進行Session跟蹤而儲存在用戶本地終端上的數據(通常經過加密),由用戶客戶端電腦暫時或永久保存的資訊。就相當於我們在銀行辦理的銀行卡,以後再去銀行的時候,銀行就直接能夠通過銀行卡辨別我們的身份。

解決方案

2 Cookie的設置與獲取

我們可以通過以下方式設置Cookie:

//通過HttpServletResponse.addCookie的方式設置Cookie:注意new Cookie()時兩個參數都是字元串  int number = 12;  //如何在cookie空間定義一個變數  Cookie cookie = new Cookie("number",String.valueOf(number));  cookie.setMaxAge(60);  response.addCookie(cookie);

在瀏覽器中可以查看到我們設置了number=12、Max-Age=60,還可以看見設置的時間:

在這裡我們設置了MaxAge,這是Cookie的有效期,單位為秒。Cookie中通過getMaxAge()和setMaxAge(int maxAge)來讀寫該屬性。maxAge有3種值,分別為正數,負數和0。

如果maxAge屬性為正數,則表示該Cookie會在maxAge秒之後自動失效。瀏覽器會將maxAge為正數的Cookie持久化,即寫到對應的Cookie文件中。無論客戶關閉了瀏覽器還是電腦,只要還在maxAge秒之前,登錄網站時該Cookie仍然有效。當maxAge屬性為負數,則表示該Cookie只是一個臨時Cookie,不會被持久化,僅在本瀏覽器窗口或者本窗口打開的子窗口中有效,關閉瀏覽器後該Cookie立即失效。當maxAge為0時,表示立即刪除Cookie

我們再通過以下方式獲取Cookie:

//服務端獲取客戶端攜帶的cookie:通過HttpServletRequest獲取  int number = 0;  Cookie[] cookies = request.getCookies();  for (Cookie cookie : cookies){      if (cookie.getName().equals("number")){          number = Integer.valueOf(cookie.getValue());          break;      }  }

結語

我們設置cookie用response,獲取cookie用request,還有需要注意的是cookie是不能跨瀏覽器的。如果伺服器端向客戶端發送重複的Cookie那麼客戶端原有的Cookie會被覆蓋,例如客戶端第一次請求伺服器端,伺服器端發送的Cookie是Set-Cookie:a=A,第二次請求發送的Cookie是Set-Cookie:a=AA,那麼客戶端只會留下後發送的Cookie,即a=AA。這也是一個修改Cookie的方法。還需要將MaxAge設置為0。新建的Cookie。除了value、maxAge之外的屬性,比如name、path、domain都必須與原來的一致才能達到修改或者刪除的效果。否則,瀏覽器將視為兩個不同的Cookie不予覆蓋。