天天看點

用戶端狀态的存儲空間——Session

http協定在設計之初被設計成無狀态特性,用戶端的每次請求在服務端看來都是獨立且無任何相關性,同一個用戶端第一次請求不會與第二次請求有任何關聯,即使相隔時間很短。無狀态的特性讓請求變得很快速且伺服器也更加高效,但是随着人們對浏覽器功能要求的不斷提高,由于無狀态導緻的不足更加明顯,因為有些場景下本次處理需要用到之前的請求的一些資訊,如果單純靠http協定而沒有額外的機制是無法辦到的。

為了提供一種讓一定時間内的每次請求都擁有記憶的會話機制,需要依靠http協定的基礎上提供一種解決方案,當然由于涉及到相關資訊的存儲,是以需要在http協定外另外提供存儲媒體,通信的主體無非就是用戶端和服務端,于是人們可以想到的就是借用戶端或服務端存儲狀态資訊,後來基于這兩端的存儲的方式都被支援。在用戶端,一種叫做cookie的小文本被生成并存放在用戶端的指定目錄,每次請求時浏覽器會從cookie找出此次請求伺服器希望得到的一些狀态并附加到http協定頭部傳往服務端,服務端由此實作通信的狀态性;在服務端,有時需要儲存的資訊量很大,存放在用戶端會導緻一個問題,即每次用戶端請求都要攜帶大量的資訊到服務端,傳輸效率低下,這時如果把用戶端的資訊都放在服務端就能避免大量附加資訊的傳輸,僅僅隻要攜帶一個識别編号到服務端即可,服務端根據此編号找到此用戶端對應的儲存資訊,至此實作通信的狀态性。

是以兩種方式可以用下圖表示,上面的為用戶端模式,用戶端每次請求都會将本地儲存的狀态一起傳到服務端,服務端通過這些狀态便可以辨識哪個用戶端的某些狀态。而下面的圖則是服務端模式,這時用戶端要傳的僅僅是一個id編号,它其實是用戶端的身份辨別,而其他狀态變量儲存在服務端,通過用戶端id可以找到對應用戶端的狀态變量,所有用戶端的狀态被統一存放在服務端進行管理。

用戶端狀态的存儲空間——Session
用戶端狀态的存儲空間——Session