cookie的儲存形式和session的實現機制
阿新 • • 發佈:2019-02-02
1.COOKIE分兩種儲存形式:
1.1:客戶端儲存形式--硬碟COOKIE:
儲存在硬盤裡,也就是在瀏覽器的安裝目錄下生成一個資料夾,有一個過期時間,除非使用者手工清理或到了過期時間,硬碟Cookie不會被刪除,其存在時間是長期的.
1.2:儲存在記憶體中--程序COOKIE:
由瀏覽器維護,首先要知道,開啟瀏覽器時,會啟用程序,該COOKIE就儲存在開啟瀏覽器的程序中,當瀏覽器關閉時,程序結束,COOKIE也就消失了.
2.SESSION:
2.1:現在已經知道,SESSION是通過SESSIONID來實現,而SESSIONID是儲存在COOKIE中,下面先來解釋一下如何通過
SESSIONID實現SESSION的,然後再解釋一下SESSION會不會隨著瀏覽器的關閉而失效:
2.2:當你第一次訪問網站並向伺服器傳送請求時,伺服器端會在響應頭上新增JSESSIONID,此ID是伺服器隨機生成而且是唯一的,這個JSESSIONID其實就是SESSIONID.SESSIONID會先將自己儲存 在COOKIE中,然後根據SESSIONID在伺服器端(也就是ACTION中)是否已存在來判斷是新建SESSION還是直接獲取SESSION.簡單來說,SESSION的實現機制就是這樣.
2.3:首先要明確一點,當瀏覽器關閉後(在SESSION的有效期間),SESSION是不會消失的.
只有人為呼叫SESSION.invalidate方法或者是超過了有效時間(有效時間預設的有效時間是30分鐘,不管瀏覽器是夠關閉,30分鐘內如果沒有進行操作,就會被視為超過了有效期)來清除.
2.3.1:如果SESSIONID是儲存在了程序COOKIE中,那麼當瀏覽器關閉後,COOKIE隨瀏覽器程序一起消失,SESSIONID也就消失了,需要宣告的是,此時伺服器端的SESSION並不會消失(在有效時間內).當再次開啟瀏覽器並向伺服器端傳送請求時,因為原來的SESSIONID已經不存在,伺服器會生成一個全新的JSESSIONID,此ID在伺服器端是全新的,也就是說根據此ID匹配不到相應的SESSION,所以伺服器會為該SESSIONID建立一個全新的SESSION,並進行繫結.
2.3.2:如果SESSIONID是儲存在了硬碟COOKIE中,那麼,當瀏覽器關閉後,SESSION(在有效期範圍內)和COOKIE(沒有被人工清除)都不會消失,再次開啟瀏覽器時,COOKIE會將SESSIONID以某種形式一起傳遞給伺服器,伺服器根據該SESSIONID去匹配SESSION.