天天看點

JavaEE學習總結(2) - cookie和session

cookie和seesion都是用于将浏覽器與伺服器之間多次互動過程當做一個整體來處理,維持多次互動,并且對多次互動所用到的資料進行管理的技術,也就是會話,解決會話跟蹤的技術。

cookie

1.關于cookie

浏覽器中我們見過的那個cookie就是這個東西,浏覽器在通路伺服器的時候,
當浏覽器再次通路伺服器的時候,會将這些資料以cookie消息頭的方式發送給伺服器。
cookie分為存在于浏覽器程序的cookie和存在于硬碟的cookie。
           

2.cookie的使用

建立cookie:
   Cookie c = new Cookie(String name,String value);
   response.addCookie(c); 發送給用戶端
查詢cookie
   //如果沒有cookie,傳回null
   Cookie[] request.getCookies();
   String cookie.getName();
   String cookie.getValue(); 一個cookie中包含name和value。
           

session

1.關于session

session是一種維持會話的技術,同樣可以存取資料。
客戶向伺服器發送請求,在伺服器端由web伺服器(tomcat),建立一個專屬客戶的session對象;每個session對象都可以存儲用戶端的各種資料;同時還包括一個唯一的辨別(sessionID),tomcat同時會将這個sessionid發送給用戶端的浏覽器中(存在浏覽器的程序cookie中,也可以自己編碼設定再硬碟cookie中但沒有意義,沒有這樣的需求),當浏覽器再向伺服器發請求是,浏覽器會自動将cookie中的 sessionid發送給伺服器,服務根據sessionid找到對應的session,這樣也就保持了會話。
           

2.維持會話的條件(session)

1.用戶端浏覽器不能關閉。//用戶端浏覽器關閉之後session雖然還存在(沒逾時情況下),但sessionID是存在于浏覽器的程序cookie中的,
是以關閉浏覽器相當于浏覽器程序結束了,那個cookie就不存在了,相應的sessionID也就找不到了,
那麼再發請求伺服器也收不到sessionID,也就維持不了會話了。但其實可以将儲存sessionID的cookie設定儲存到本地,這樣關閉浏覽器這個cookie也不會銷毀,再打開浏覽器還可以保持會話,但這樣沒有意義,沒有需求。
2.session不逾時
3.伺服器不重新開機  //重新開機之後session就消失了。
           

3.獲得session的方法

session是由伺服器來建立的,我們隻得獲得,而不建立,獲得的方法是
request.getSession();
           

4.session的常用方法;

getId():獲得session的唯一辨別
setAttribute(name,value):向session中存儲一對值;
getAttribute(name):根據名取值;
getAttributeNames():獲得所有屬性名
           

5.設定session的逾時時間可以通過兩種方式

通過配置web.xml:
           
<session-config>
                <session-timeout>1</session-timeout>
            </session-config>
           
在代碼中可以使用:session.setMaxInactiveInterval(60*60*2);
           

cookie和session的差別

(1)cookie是一種用戶端的狀态管理技術,将狀态寫在浏覽器端,
  而session是一種伺服器端的狀态管理技術,将狀态寫在web伺服器上面。

(2) cookie有很多限制:可以被使用者禁止,cookie能夠儲存的資料比較小(大約4k),而且儲存的個數也有限制(300個左右),
cookie不安全,cookie隻能儲存字元串。
    而session能夠儲存更多的資料,相對更安全,儲存的資料類型更豐富。
    session會将所有的狀态寫在伺服器端,是以伺服器的壓力比較大,而cookie沒有這個問題。

(3)Session是在服務端儲存的一個資料結構,用來跟蹤使用者的狀态,這個資料可以儲存在叢集、資料庫、檔案中;
    Cookie是用戶端儲存使用者資訊的一種機制,用來記錄使用者的一些資訊,也是實作Session的一種方式。
           

繼續閱讀