1. 程式人生 > >【Java學習-J.160611.0.21】Servlet基礎四 cookie部分

【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);
  }

 }