Session的生命週期

2021-06-20 03:43:20 字數 1455 閱讀 7829

以前在學習的時候沒怎麼注意,今天又回過頭來仔細研究研究了一下session的生命週期。

session儲存在伺服器端,一般為了防止在伺服器的記憶體中(為了高速訪問),sessinon在使用者訪問第一次訪問伺服器時建立,需要注意只有訪問jsp、servlet等程式時才會建立session,只訪問html、image等靜態資源並不會建立session,可呼叫request.getsession(true)強制生成session。

session什麼時候失效?

1. 伺服器會把長時間沒有活動的session從伺服器記憶體中清除,此時session便失效。tomcat中session的預設失效時間為20分鐘。

2. 呼叫session的invalidate方法。

session對瀏覽器的要求:

雖然session儲存在伺服器,對客戶端是透明的,它的正常執行仍然需要客戶端瀏覽器的支援。這是因為session需要使用cookie作為識別標誌。http協議是無狀態的,session不能依據http連線來判斷是否為同一客戶,因此伺服器向客戶端瀏覽器傳送乙個名為jsessionid的cookie,它的值為該session的id(也就是httpsession.getid()的返回值)。session依據該cookie來識別是否為同一使用者。

該cookie為伺服器自動生成的,它的maxage屬性一般為-1,表示僅當前瀏覽器內有效,並且各瀏覽器視窗間不共享,關閉瀏覽器就會失效。因此同一機器的兩個瀏覽器視窗訪問伺服器時,會生成兩個不同的session。但是由瀏覽器視窗內的鏈結、指令碼等開啟的新視窗(也就是說不是雙擊桌面瀏覽器圖示等開啟的視窗)除外。這類子視窗會共享父視窗的cookie,因此會共享乙個session。

注意:新開的瀏覽器視窗會生成新的session,但子視窗除外。子視窗會共用父視窗的session。例如,在鏈結上右擊,在彈出的快捷選單中選擇"在新視窗中開啟"時,子視窗便可以訪問父視窗的session。

url位址重寫是對客戶端不支援cookie的解決方案。url位址重寫的原理是將該使用者session的id資訊重寫到url位址中。伺服器能夠解析重寫後的url獲取session的id。這樣即使客戶端不支援cookie,也可以使用session來記錄使用者狀態。httpservletresponse類提供了encodeurl(string url)實現url位址重寫,該方法會自動判斷客戶端是否支援cookie。如果客戶端支援cookie,會將url原封不動地輸出來。如果客戶端不支援cookie,則會將使用者session的id重寫到url中。

注意:tomcat判斷客戶端瀏覽器是否支援cookie的依據是請求中是否含有cookie。儘管客戶端可能會支援cookie,但是由於第一次請求時不會攜帶任何cookie(因為並無任何cookie可以攜帶),url位址重寫後的位址中仍然會帶有jsessionid。當第二次訪問時伺服器已經在瀏覽器中寫入cookie了,因此url位址重寫後的位址中就不會帶有jsessionid了。

**:

session 生命週期

session的生命週期 當發生下面的情況時,session以及其中的資料會被清空 使用者關閉當前正在使用的瀏覽器 關閉網頁伺服器 使用者未向服務 起提出請求或超過預定的時間,tomcat伺服器預設為30分鐘 執行程式結束session。注意,當瀏覽器關閉時,不會向伺服器傳送訊息,這次會話關聯的所有...

Session生命週期

session生命週期 session儲存在伺服器端,一般放置在伺服器的記憶體中 為了高速訪問 session在使用者第一次訪問伺服器時建立,需要注意只有訪問jsp,servlet等程式時才會建立session,只訪問html image等靜態資源並不會建立session,可呼叫request.ge...

Session生命週期

今天我就詳細講解下中間那個兄弟.因為在網上看到很多文章.幾乎毫無例外的說.乙個瀏覽器只有乙個session,瀏覽器關閉session就消失了.其實這種方法是不正確的.要了解session首先要知道乙個概念 session的銷毀只有兩種情況 第一 session呼叫了 session.invalida...