1. 程式人生 > >cookie的儲存形式和session的實現機制

cookie的儲存形式和session的實現機制

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.

設定SESSION有效期的目的:伺服器無法可以感知瀏覽器是否已關閉,(當然,你可以在關閉的時候去通知伺服器,但一般都不會這樣做)所以關閉瀏覽器後,伺服器端(也就是ACTION)的SESSION是不會被刪除的,伺服器早晚會被SESSION給撐爆的.正因為如此,所以有了有效期.

以上純屬個人總結,如果有哪位大佬發現有寫的不對的地方,還煩請幫忙指出。