session機制大揭秘(結合cookie)


session運行機制

當一個session開始時,servlet容器將創建一個httpSession對象,在HttpSession對象中可以存放客戶狀態信息。

servlet容器為HttpSession分配唯一一個標識符,成為sessionID,servlet容器把session id 作為cookie保存在客戶端瀏覽器中,每次客戶發送http請求時,servlet容器可以從HTTPServletRequest對象中讀取session  ID,然后根據session ID找到相應的HttpSession對象,從而獲取客戶的狀態信息。

理解圖:

 

它通過getID的方式產生一個sessionID,通過cookie的方式寫入客戶端,客戶端再通過請求,再將該ID返回給服務器端,這樣,一來一去,服務器就知道與客戶端對應的session對象是什么了,所以產生服務器端多個session對象之間不會出現干擾。他們之間是相互獨立的。

HttpSession接口

1.getID():獲取session值

2.isNew():判斷是否創建新的sessin

3.SetMaxInactiveInterval() 設置一個session可以處於不活動狀態的最大時間間隔,以秒為單位,如果為負數,表不限制session處於不活動狀態的時間,默認值為30分鍾

設置sessin失效時間(在xml中)

<session-config>

  <session-timeout>10</session-timeout>

</session-config>

默認頁面都對session支持,因為

<%@page session="true">為默認的

sessin生命周期

當客戶第一次訪問web應用中支持session的某個頁面時,就會開始一個新的sessin。

接下來當客戶瀏覽這個web應用的不同網頁時,始終處於同一個session中。

結束:在以下情況中,session將會結束生命周期,servlet容器會將session所占用的資源釋放掉

1.客戶端關閉瀏覽器(正常關閉)

2.sessin過期

3.服務器端調用了HttpSession的invalidation()方法。

嚴格的講:關閉瀏覽器不一定刪除sessin,有時候用以下幾種方法可以強制關閉

1.可以在所有頁面中js的window.onclose來見識瀏覽器是否關閉

但是對於瀏覽器崩潰或者強行殺死進程,這些非常規手段無能為力,所以在實際項目中,我們讓sessin過期時,釋放刪除。

sessinID對應的cookie是存在於瀏覽器進程上得,當瀏覽器關閉時,對應的進程消失,cookie也隨之消失、。

session對應的cookie是存在於瀏覽器進程上面的,所以我們稱之為會話cookie,所以,當關閉瀏覽器時,客戶端不會向服務器發送任何請求,也不會收到任何響應,服務器端的session依然存活着,當新開一個瀏覽器時,就會新開一個sessionID。

session過期,是指當session開始后,在一段時間內,客戶沒有和web服務器交互,這個session會話會失效,我們可以通過HttpSession的setMaxInactiveInterval()方法設置允許session保持不活動的時間(以秒為單位)

練習題:

哪一個說法正確:

A.對於每個請求訪問mailLogin.jsp的Http請求,servlet容器都會創建一個HttpSession對象。

B.每個HttpSession對象都有唯一的ID

C.javaWeb應用程序必須負責為HttpSession分配唯一的ID

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM