Session的工作原理

2022-05-06 13:00:18 字數 1472 閱讀 3090

以前在學習的時候沒怎麼注意,今天又回過頭來仔細研究研究了一下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了。

人生最可貴的事情是sb似的堅持於追求……

Session的工作原理

首先,我們需要知道session是什麼。有比較專業的人將session稱之為會話控制。說實在的,如果這麼說的話,我也不清楚session到底算是什麼。其實session是乙個存在伺服器上的類似於乙個雜湊 的檔案。裡面存有我們需要的資訊,在我們需要用的時候可以從裡面取出來。類似於乙個大號的map吧,裡...

session 的工作原理?

session 是瀏覽器和伺服器會話過程中,伺服器分配的一塊儲存空間。伺服器預設為瀏覽器在cookie中設定 sessionid,瀏覽器在向伺服器請求過程中傳輸 cookie 包含 sessionid 伺服器根據 sessionid 獲取出會話中儲存的資訊。由於 http 協議是無狀態的,即 htt...

Session的工作原理

在伺服器中系統會為每個會話維護乙個 session。不同的會話,對應不同的 session。系統是如何識別各個 session 物件的?即是如何做到在同一會話過程中,一直使用的是同乙個 session 物件呢?1 寫入 session 列表 伺服器對當前應用中的 session 是以 map 的形式...