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

Cookie&Session會話技術

一.會話技術

1) 從開啟一個瀏覽器訪問某個站點,到關閉這個瀏覽器的整個過程,成為一次會話。會話技術就是記錄這次會話中客戶端的狀態與資料的。

2)會話技術分為Cookie和Session:

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

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

二、Cookie技術

1.伺服器端向客戶端傳送一個Cookie

1)建立Cookie:

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

 

注意:Cookie中不能儲存中文 。

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

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

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

 

 

3)設定Cookie的攜帶路徑:

cookie.setPath(String path);

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

 

 

4)向客戶端傳送cookie:

response.addCookie(Cookie cookie);

 

5)刪除客戶端的cookie:

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

 

2.伺服器端怎麼接受客戶端攜帶的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技術

1.獲得Session物件

HttpSession session = request.getSession();

   * 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()時建立

銷燬:

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

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

 

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

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

 

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

<session-config>

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

</session-config>

3)手動銷燬session

session.invalidate();

 

作用範圍:

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