JAVAWEB學習(6) — Cookie
阿新 • • 發佈:2018-11-24
Cookie
1. 狀態管理
1.1 什麼是狀態管理
將瀏覽器與web伺服器之間多次互動當做一個整體來處理,並且將多次互動所涉及的資料(即狀態)儲存下來。
1.2 如何進行狀態管理
- 將狀態儲存在瀏覽器端(Cookie)
- 將狀態儲存在伺服器端(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的匹配規則
-
請求路徑必須等於cookie的路徑或者是其子路徑,只有滿足該條件的cookie才會被髮送
-
可以修改cookie的路徑
cookie.setPath(String path);
-
9. Cookie的限制
-
cookie可以被使用者禁止
-
cookie不安全
對於敏感資料,儘量避免存放在cookie裡面,如果一定要存放,要加密之後再存放
-
cookie只能存放少量的資料,大約是4k左右
-
cookie的個數有限制
-
cookie只能存放字串