【Java學習-J.160611.0.21】Servlet基礎四 cookie部分
一、狀態管理
1)什麼是狀態管理
將客戶端與伺服器之間的多次互動當作一個整體來看待,將多次操作產生的資料記錄下來。
2)怎樣進行狀態管理
1、cookie(在客戶端管理使用者的狀態)
2、session(在伺服器端管理使用者的狀態)
二、cookie
1) 什麼是cookie
瀏覽器在訪問伺服器時,伺服器將一些資料以set-cookie訊息頭的形式發給瀏覽器,瀏覽器會將這些資料儲存下來,當再次訪問伺服器時,會將這些資料以cookie訊息頭的形式傳送給伺服器,通過這種方式可以管理使用者的狀態。
2)建立cookie
Cookie cookie=new Cookie("username","aa");
response.addCookie(cookie);
3)查詢cookie
request.getCookie();
三、儲存cookie時的編碼問題
cookie的值只能以ascii字元,如果是中文,需要將中文轉換成ascii字元形式
URLEncoder.encode();//將中文轉換成字元編碼集
URLDecoder.decode();
四、cookie的生成時間
cookie.sexMaxAge(int secondes);
secondes>0 :瀏覽器將cookie以檔案形式儲存在硬碟上,超過指定時間後,將會刪除該檔案
secondes<0:預設cookie存放在記憶體當中,當瀏覽器關閉時自動刪除
secondes=0:立即刪除cookie
五、cookie路徑問題
瀏覽器在向伺服器上的某個地址傳送請求時,會先比較cookie的路徑與訪問的路徑地址是否匹配,只有匹配的cookie才會傳送
cookie.setPath(String url);
如果沒有設定,則有一個預設的路徑,預設的路徑是生成該cookie的元件的路徑。注意:cookie的傳送包含生成該cookie的子路徑,不包含父路徑 。
六、cookie的工具類(新增、刪除、查詢cookie)
//需要導包
public class CookieUtil{
private static int default_age=365*24*3600;//預設時間一年
private static String default_path="/textdemo";
//新增cookie
public static void addCookie(String name, String value, int age,HttpServletResponse response) throws Exception{
Cookie cookie=new Cookie(name,URLEncoder.encode(value,"utf-8"));
cookie setMaxAge(age);
cookie setPath(default_path);
response.addCookie(cookie);
}
//設定預設時間的coookie
public static void addCookie(String name,String value,HttpServletResponse response)throws Exception{
addCookie(name,value,default_age,response);
}
//查詢cookie
public static String findcookie(String name,HttpServletRequst request)throws Exception{
Cookie[] cookies=request.getCookie();
String value="";
for(int i=0;i<cookies.length;i++){
Cookie cookie=cookies[i];
if(cookie.getName()==name){
value=URLDcoder.decode(cookie.getVlaue(),"utf-8");
}
}
return value;
}
//刪除cookie
public static void deletCookie(String name,HttpServletResponse response){
Cookie cookie=new Cookie(name,"");
cookie.sexMaxAge(0);
cookie.setPath(default_path);
response.addCookie(cookie);
}
}