天天看點

會話技術Cookie&Session會話技術CookieSession

會話技術

從打開一個浏覽器通路某個站點,到關閉這個浏覽器的整個過程,成為一次會話。會話技術就是記錄這次會話中用戶端的狀态與資料的。

會話技術分為Cookie和Session:

Cookie:資料存儲在用戶端本地,減少伺服器端的存儲的壓力,安全性不好,用戶端 可以清除cookie

Session:将資料存儲到伺服器端,安全性相對好,增加伺服器的壓力

Cookie

Cookie技術

Cookie技術是将使用者的資料存儲到用戶端的技術,我們分為兩方面學習:

第一,伺服器端怎樣将一個Cookie發送到用戶端

第二,伺服器端怎樣接受用戶端攜帶的Cookie

一、伺服器端向用戶端發送一個Cookie

1)建立Cookie:

Cookie cookie = new Cookie(String cookieName,String cookieValue);

示例:

Cookie cookie = new Cookie(“username”,“zhangsan”);

那麼該cookie會以響應頭的形式發送給用戶端:

注意:Cookie中不能存儲中文

2)設定Cookie在用戶端的持久化時間:

cookie.setMaxAge(int seconds); —時間秒

注意:如果不設定持久化時間,cookie會存儲在浏覽器的記憶體中,浏覽器關閉 cookie資訊銷毀(會話級别的cookie),如果設定持久化時間,cookie資訊會 被持久化到浏覽器的磁盤檔案裡

示例:

cookie.setMaxAge(10*60);

設定cookie資訊在浏覽器的磁盤檔案中存儲的時間是10分鐘,過期浏覽器 自動删除該cookie資訊

3)設定Cookie的攜帶路徑:

cookie.setPath(String path);

注意:如果不設定攜帶路徑,那麼該cookie資訊會在通路産生該cookie的web資源所在的路徑都攜帶cookie資訊

示例:

cookie.setPath("/WEB16");

代表通路WEB16應用中的任何資源都攜帶cookie

cookie.setPath("/WEB16/cookieServlet");

代表通路WEB16中的cookieServlet時才攜帶cookie資訊

4)向用戶端發送cookie:

response.addCookie(Cookie cookie);

5)删除用戶端的cookie:

如果想删除用戶端的已經存儲的cookie資訊,那麼就使用同名同路徑的持久化時間為0的cookie進行覆寫即可

二、伺服器端怎麼接受用戶端攜帶的Cookie

cookie資訊是以請求頭的方式發送到伺服器端的:

1)通過request獲得所有的Cookie:

Cookie[] cookies = request.getCookies();

2)周遊Cookie數組,通過Cookie的名稱獲得我們想要的Cookie

for(Cookie cookie : cookies){

if(cookie.getName().equal(cookieName)){

String cookieValue = cookie.getValue();

}

}

Session

Session技術是将資料存儲在伺服器端的技術,會為每個用戶端都建立一塊記憶體空間存儲客戶的資料,但用戶端需要每次都攜帶一個辨別ID去伺服器中尋找屬于自己的記憶體空間。是以說Session的實作是基于Cookie,Session需要借助于Cookie存儲客戶的唯一性辨別JSESSIONID

在Session這我們需要學習如下三個問題:

怎樣獲得屬于本用戶端的session對象(記憶體區域)?

怎樣向session中存取資料(session也是一個域對象)?

session對象的生命周期?

  1. 獲得Session對象

    HttpSession session = request.getSession();

    此方法會獲得專屬于目前會話的Session對象,如果伺服器端沒有該會話的Session,對象會建立一個新的Session傳回,如果已經有了屬于該會話的Session直接将已有的Session傳回(實質就是根據JSESSIONID判斷該用戶端是否在伺服器上已經存在 session了)

  2. 怎樣向session中存取資料(session也是一個域對象)

    Session也是存儲資料的區域對象,是以session對象也具有如下三個方法:

    session.setAttribute(String name,Object obj);

    session.getAttribute(String name);

    session.removeAttribute(String name);

  3. Session對象的生命周期(面試題/筆試題)

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

    用戶端通路服務端,伺服器端在執行到request.getSession()時判斷有沒有屬于該用戶端的session區域,有則不建立,無則建立新的session對象

    銷毀:

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

    2)session過期/失效(預設30分鐘)

問題:時間的起算點 從何時開始計算30分鐘?

從不操作伺服器端的資源開始計時

可以在工程的web.xml中進行配置

30

3)手動銷毀session

session.invalidate();

作用範圍:

預設在一次會話中,也就是說在,一次會話中任何資源公用一個session對象

面試題:浏覽器關閉,session就銷毀了?

不對,和用戶端無關

會話技術:

Cookie技術:存到用戶端

發送cookie

Cookie cookie = new Cookie(name,value)

cookie.setMaxAge(秒)

cookie.setPath()

response.addCookie(cookie)

獲得cookie

Cookie[] cookies = request.getCookies();

cookie.getName();

cookie.getValue();

Session技術:存到伺服器端 借助cookie存儲JSESSIONID

HttpSession session = request.getSession();

setAttribute(name,value);

getAttribute(name);

session生命周期

建立:第一次指定request.getSession();

銷毀:伺服器關閉、session失效/過期、手動session.invalidate();

session作用範圍:預設一會話中

繼續閱讀