1. 程式人生 > >Servlet學習(七)——會話技術cookie&session

Servlet學習(七)——會話技術cookie&session

文件 servlet 請求頭 tro 訪問服務器 狀態 設置 路徑 技術分享

一、會話技術簡介

1.存儲客戶端的狀態

例如網站的購物系統,用戶將購買的商品信息存儲到哪裏?因為Http協議是無狀態的,也就是說每個客戶訪問服務器端資源時,服務器並不知道該客戶端是誰,所以需要會話技術識別客戶端的狀態。會話技術是幫助服務器記住客戶端狀態(或者說區分客戶端,是張三登錄的還是李四登錄的)

2.會話技術

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

會話技術分為Cookie和Session:

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

Session:將數據存儲到服務器端,安全性相對好,增加服務器的壓力

技術分享

二、Cookie技術

Cookie技術是將用戶的數據存儲到客戶端的技術,我們分為兩方面學習:

第一,服務器端怎樣將一個Cookie發送到客戶端

第二,服務器端怎樣接受客戶端攜帶的Cookie

技術分享

1.服務器端向客戶端發送一個Cookie

  1)創建Cookie:

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

   示例:Cookie cookie = new Cookie("username","zhangsan");

   那麽該cookie會以響應頭的形式發送給客戶端:Set-Cookie:"name=zhangsan"

   註意: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進行覆蓋即可

2.服務器端怎麽接受客戶端攜帶的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();

    }

  }

Servlet學習(七)——會話技術cookie&session