1. 程式人生 > >JavaWeb——會話技術Cookie & Session

JavaWeb——會話技術Cookie & Session

on() col 路徑 時間 blog 持久化 date timeout pat

會話技術

因為Http協議是無狀態的,也就是說每個客戶訪問服務器端資源時,服務器並不知道該客戶端是誰,所以需要會話技術識別客戶端的狀態。會話技術是幫助服務器記住客戶端狀態(區分不同的客戶端)

從打開一個瀏覽器訪問某個站點,到關閉這個瀏覽器的整個過程,成為一次會話。會話技術就是記錄這次會話中客戶端的狀態與數據的。
會話技術分為Cookie和Session:

  • Cookie:數據存儲在客戶端本地,減少服務器端的存儲的壓力,安全性不好,客戶端 可以清除cookie
  • Session:將數據存儲到服務器端,安全性相對好,增加服務器的壓力

一、Cookie技術

Cookie技術是將用戶的數據存儲到客戶端的技術。

1、設置cookie

Cookie cookie = new Cookie("username","x5456");     // 創建cookie對象

cookie.setMaxAge(10*60);     // 設置cookie有效期為10min,默認是到瀏覽器關閉時,設置為0清除cookie

cookie.setPath("/WEB16");   // 設置cookie攜帶路徑,默認會將整個web應用(/WEB16)戴上cookie

response.addCookie(cookie);     // 將cookie中存儲的信息發送到客戶端

註意:如果不設置持久化時間,cookie會存儲在瀏覽器的內存中,瀏覽器關閉 cookie信息銷毀(會話級別的cookie),如果設置持久化時間,cookie信息會 被持久化到瀏覽器的磁盤文件裏

cookie只能存除中文的字符串

2、獲取指定的cookie

cookie信息是以請求頭的方式發送到服務器端的

Cookie[] cookies = request.getCookies();    // 獲取cookie列表

for(Cookie cookie : cookies){     // 遍歷Cookie數組,通過Cookie的名稱獲得我們想要的Cookie
    if(cookie.getName().equals("username")){
        String cookieValue = cookie.getValue();
        System.out.println(cookieValue);
    }
}

3、清除cookie

Cookie c = new Cookie("name","");   // key為要清除的cookie

c.setMaxAge(0);

c.setPath("/WEB16");    // 路徑要和之前一樣

response.addCookie(c);

二、Session技術

Session技術是將數據存儲在服務器端的技術,會為每個客戶端都創建一塊內存空間存儲客戶的數據,但客戶端需要每次都攜帶一個標識ID去服務器中尋找屬於自己的內存空間。所以說Session的實現是基於Cookie,Session需要借助於Cookie存儲客戶的唯一性標識JSESSIONID

1、向session域中存取數據

session也是一個域對象,所以也可以用get/set/remove方法

/*
 * request.getSession()方法內部會判斷 該客戶端是否在服務器端已經存在session
 * 如果該客戶端在此服務器不存在session 那麽就會創建一個新的session對象
 * 如果該客戶端在此服務器已經存在session 獲得已經存在的該session返回
 */
HttpSession session = request.getSession();

session.setAttribute("name","x5456");   // 設置Session

String JSESSIONID = session.getId();    // 獲取Session對象的編號id

Cookie cookie = new Cookie("JSESSIONID",JSESSIONID);    // 手動創建一個存儲JSESSIONID的Cookie,為該cookie設置持久化時間

cookie.setPath("/WEB16");
cookie.setMaxAge(60*10);

response.addCookie(cookie);

2、獲得Session中的值

HttpSession session = request.getSession();  // 獲取域對象

Object name = session.getAttribute("name");

System.out.println( (String) name);

Session對象的生命周期

創建:第一次執行request.getSession()時創建

銷毀:

1)服務器(非正常)關閉時

2)session過期/失效(默認30分鐘)

時間的起算點:從不操作服務器端的資源開始計時

可以在工程的web.xml中進行配置過期時間

<session-config>

  <session-timeout>30</session-timeout>

</session-config>

3)手動銷毀

session.invalidate();

作用範圍:
默認在一次會話中,也就是說在,一次會話中任何資源公用一個session對象

JavaWeb——會話技術Cookie & Session