session機制是一種伺服器端的機制,伺服器使用一種類似於雜湊表
的結構(也可能就是使用
雜湊表)來儲存資訊。
當程式需要為某個客戶端的請求建立乙個session的時候,伺服器首先檢查這個客戶端的請求裡是否已包含了乙個session標識-稱為sessionid,如果已包含乙個sessionid則說明以前已經為此客戶端建立過session,伺服器就按照s
essionid把這個session檢索出來使用(如果檢索不到,可能會新建乙個),如果客戶端請求不包含sessionid,則為此客戶端建立乙個session並且生成乙個與此session相關聯的sessionid,sessionid的值應該是乙個既不會
重複,又不容易被找到規律以仿造的字串,
這個sessionid將被在本次響應中返回給客戶端儲存。
儲存這個sessionid的方式可以採用cookie,這樣在互動過程中瀏覽器可以自動的按照規則把這個標識發揮給伺服器。一般這個cookie的名字都是類似於seeesionid,而。比如weblogic對於web應用程式生成的cookie,jsessionid=byok3vjfd75apnrf7c2hmdnv
6qzcebzwowibyenlerjq99zw
pbng!-145788764,它的名字就是jsessionid。
由於cookie可以被人為的禁止,必須有其他機制以便在cookie被禁止時仍然能夠把sessionid傳遞歸伺服器。經常被使用的一種技術叫做url重寫,就是把sessionid直接附加在url路徑的後面,附加方式也有兩種,一種是作為url路徑的附加資訊,表現形式為http://...../***;jsessionid=byok3vjfd75apnrf7c2hmdnv
6qzcebzwowibyenlerjq99zw
pbng!-145788764
另一種是作為查詢字串附加在url後面,表現形式為http://...../***?jsessionid=byok3vjfd75apnrf7c2hmdnv
6qzcebzwowibyenlerjq99zw
pbng!-145788764
這兩種方式對於使用者來說是沒有區別的,只是伺服器在解析的時候處理的方式不同,採用第一種方式也有利於把sessionid的資訊和正常程式引數區分開來。
為了在整個互動過程中始終保持狀態,就必須在每個客戶端可能請求的路徑後面都包含這個sessionid。
另一種技術叫做表單隱藏字段。就是伺服器會自動修改表單,新增乙個隱藏字段,以便在表單提交時能夠把
sessionid傳遞歸伺服器。比如下面的表單
在被傳遞給客戶端之前將被改寫成
這種技術現在已較少應用,筆者接觸過的很古老的iplanet6(sunone應用伺服器的前身)就使用了這種
技術。實際上這種技術可以簡單的用對action應用url重寫來代
替。在談論session機制的時候,常常聽到這樣一種誤解「只要關閉
瀏覽器,session就消失了」。其實可以想象一下會員卡的例子,除非顧客主動對店家提出銷卡,否則店家絕對不會輕易刪除顧客的資料。對session來說也是一樣的,除非程式通知伺服器刪除乙個session,否則伺服器會一直保留,程式一般都是在使用者做logoff的時候發個指令去刪除session。然而瀏覽器從來不會主動在關閉之前通知伺服器它將要關閉,因此伺服器根本不會有機會知道瀏覽器已經關閉,之所以會有這種錯覺,是大部分session機制都使用會話cookie來儲存sessionid,而關閉瀏覽器後這個sessionid就消失了,再次連線伺服器時也就無法找到原來的session。如果伺服器設定的cookie被儲存到硬碟上,或者使用某種手段改寫瀏覽器發出的http請求頭,把原來的sessionid傳送給伺服器,則再次開啟瀏覽器仍然能夠找到原來的session。 [page]
恰恰是由於關閉瀏覽器不會導致session被刪除,迫使伺服器為seesion設定了乙個失效時間,當距離客戶端上一次使用session的時間超過這個失效時間時,伺服器就可以認為客戶端已經停止了活動,才會把session刪除以節省儲存空間。
session執行機制
session是內建物件,cookie不是 session 會話 客戶端第一次請求伺服器時,伺服器會產生乙個session物件 用於儲存該客戶的資訊 並且每乙個session物件會有乙個唯一的sessionid 用於區分其他的session 服務端又會產生乙個cookie,並且該cookie的nam...
session執行機制
瀏覽器和伺服器採用http無狀態的通訊,為了保持客戶端的狀態,使用session來標示不同的客戶端或使用者 1 使用者 瀏覽器 向web應用伺服器傳送第一次請求時,請求頭部中不包含sessionid session唯一標識 則伺服器會為該客戶端建立乙個新的session,並生成乙個與此session...
session執行機制
客戶端第一次請求服務端時,服務端會產生乙個session物件 用於儲存該客戶的資訊 並且每個session物件,都會有乙個唯一的sessionid 用於區分其他session 服務端都會產生乙個cookie,並且該cookie的name jsessionid,value 服務端sessionid的值...