1. 程式人生 > >JAVAWEB學習(6) — Cookie

JAVAWEB學習(6) — Cookie

Cookie

1. 狀態管理

1.1 什麼是狀態管理

將瀏覽器與web伺服器之間多次互動當做一個整體來處理,並且將多次互動所涉及的資料(即狀態)儲存下來。

1.2 如何進行狀態管理

  1. 將狀態儲存在瀏覽器端(Cookie)
  2. 將狀態儲存在伺服器端(Session)

2. 什麼是Cookie

伺服器臨時存放在瀏覽器端的少量資料,用於跟蹤使用者的狀態。

3. 工作原理

當瀏覽器訪問伺服器時,伺服器會將少量資料以set-cookie訊息頭的方式傳送給瀏覽器,瀏覽器會將這些資料臨時儲存下來。當瀏覽器再次訪問伺服器時,會將這些資料以cookie訊息頭的方式傳送給伺服器。

4. 新增Cookie

//Cookie只能存放字串
Cookie c = new Cookie(String name,String value);
response.addCookie(c);

5. 讀取Cookie

//讀取Cookie
Cookie[] request.getCookies();
//獲得Cookie的名字
String cookie.getName();
//獲得Cookie的值
String cookie.getValue();

6. Cookie的生存時間

預設情況下,瀏覽器會將Cookie儲存在記憶體裡面。瀏覽器關閉,則cookie會被刪除。

cookie.
setMaxAge();

單位是秒

當seconds > 0 時,瀏覽器會將cookie儲存在硬碟上,當超過指定時間,cookie會被刪除

當seconds < 0 時,瀏覽器會將cookie儲存在記憶體裡面

當seconds = 0 時,瀏覽器會立即刪除該cookie

  • 刪除cookie

    Cookie c = new Cookie("username", "");
    c.setMaxAge(0);
    response.addCookie(c);
    

7. Cookie的編碼問題

  • 什麼是cookie的編碼問題

    cookie只能存放合法的ascii字元,中文需要轉換成合法的ascii字元的形式才能存放

    String URLEncoder.encode(String str, String charset);
    String URLDecoder.decode(String str, String charset);
    
  • 建議:不管是否為中文,最好統一編碼處理

    //新增Cookie
    Cookie cookie = new Cookie("name", URLEncoder.encode("使用者", "UTF-8"));
    response.addCookie(cookie);
    //讀取Cookie
    String name = URLDecoder.decod(cookies[i].getValue, "UTF-8");
    

8. Cookie的路徑問題

  • 什麼是cookie的路徑問題

    瀏覽器訪問伺服器時,會比較請求地址是否與cookie的路徑匹配,只有匹配的cookie才會被髮送

  • cookie的預設路徑

    cookie的預設路徑為新增該cookie的web元件的路徑

  • cookie的匹配規則

    1. 請求路徑必須等於cookie的路徑或者是其子路徑,只有滿足該條件的cookie才會被髮送

    2. 可以修改cookie的路徑

      cookie.setPath(String path);
      

9. Cookie的限制

  1. cookie可以被使用者禁止

  2. cookie不安全

    對於敏感資料,儘量避免存放在cookie裡面,如果一定要存放,要加密之後再存放

  3. cookie只能存放少量的資料,大約是4k左右

  4. cookie的個數有限制

  5. cookie只能存放字串