Session執行機制與原理


Session執行機制與原理

作者:Stanley 羅昊

轉載請注明出處和署名,謝謝!

什么是Session

首先了解一下Session的中文意思:一次會話,什么是一次會話呢?我舉個例子:就我們現在上網,打開瀏覽器瀏覽網站當時開始到你關閉瀏覽器,就稱之為一次會話

也可以這么理解,當你在網上購物,瀏覽、選擇商品、付款、退出,這個就可以理解成一次會話;

一次開始到一次結束

快速理解Session的執行機制

比如我現在客戶端向服務端發送一個請求,這個時候服務端就用會一個Session來跟你一一對應,下面我畫一張圖來解釋:

當張三用游覽器向服務器發送一個請求的時候,服務器會給它創建並分配一個Session,同時,李四也訪問服務器,這個時候服務器同時也會給李四創建並分配一個Session,兩個人一個一個相互獨立互不干擾。

分配給你的Session就是用來保存信息的,比如這個時候又來一個王五,王五給服務端發一個請求,這個時候我服務端又產生了一個Session用於保存王五的信息。

Session機制詳解

客戶端第一次請求服務端時,服務端會產生一個Session對象(用於保存該客戶信息);

並且每個Session對象都會有一個唯一的SessionID(用於區分其他Session);

服務端又會產生一個Cookie,並且該Cookie的name 就是寫死的 name = JSESSIONID它的value就是剛才Session的ID,valie = 服務端SessionID的值

然后服務端會在響應客戶端的同時,將該Cookie發送給客戶端,至此客戶端就有了一個Cookie(JSESSIONID),這個JSESSIONID的值就是剛才SessionID的值;

因此,客戶端的Cookie就可以和服務器的Session一一對應起來了(【客戶端】JSESSIONID =【服務端】 SessionID);

這樣就可以保證每個人都擁有一個唯一的Session,來保存用戶的信息。

JSESSIONID詳解

那么,請求是如何相互對應的呢?這里我舉個例子,當張三第一次請求服務端時,它就會產生一個Session對象,Session對象他會自帶了一個SessionID,也就是Session產生的同時會帶一個SessionID

這個時候SessionID會把SessionID復制了一份給了JSESSIONID,也就說,SessionID跟JSESSIONID的值是一模一樣的,這個時候它就會把JSESSIONID放到Cookie里面

也就是我第一次請求時,會產生一個Session,並且Session會自帶一個SessionID,假設這個SessionID的值是1,這個時候SessionID 1 這個值又賦給了JSESSIONID,這時JSESSIONID的值也是1了,然后我服務端做出響應,上次我也說過,當我們響應的同時會將Cookie給發過去

Cookie是由服務端產生,所以在響應的時候發給客戶端,這時,這個Cookie里面就包含我存的這個值1;

這個時候,我客戶端有一個1,我服務端也有一個1,這個時候不就一一對應起來了嗎,所以就不會亂,也就說我服務端的SessionID的1與客戶端的JSESSIONID的1一一對應用於區分客戶

也就說,我客戶端與服務端是通過Session與Cookie對應起來的,Cookie里面的JSESSIONID和Session里面的Sessionid兩個相對應。如果還不理解請看我下發畫的圖:

 

客戶端的JSESSIONID與服務端的SessionID一一對應。

第二次請求

上面我一直在說第一次請求,那如果不是第一次呢?如果是第二次或者更多次呢

第一次請求的時候給你一個Session對象,那我第二次呢?還需要給嗎?當然不需要了

我第一次已經給你過Session了所以我第二次請求時,就不需要給你Session了,直接找你這個Session就完了;

怎么找?就是根據你的JSESSIONID(客戶端)和SessionID(服務端)進行匹配如果匹配的時候發現客戶端JSESSIONID和在服務端存在的SessionID一模一樣,就可以說明這個人之前登錄成功過或曾經存在過

因此我們上淘寶上京東我們就會發現,第一次登錄成功后第二次就無需登錄,一直保持在線狀態

當我們第一次訪問京東時我登錄了,登錄完之后它馬上就給我一個Session,里面放用戶名密碼,因為創建的同時會有一個SessionID,假設這個SessionID的值是4,然后把這個4放到Cookie里面再發給客戶端,客戶端有個Cookie,我JSESSIONID是4,兩者對應起來后我就不需要再進行登錄操作了。

Session的重要核心機制

1.Session存儲在服務端

2.Session是在同一個用戶(客戶)請求是共享的【意思就是你第一次開櫃子匹配失敗發現你是新用戶就,給你分配了一把鑰匙,當你第二次去開的時候就無需再分配鑰匙,今天兩個小時之內你不停的去開櫃子都不需要再分配鑰匙,所以你的請求已經被共享了,只要你有鑰匙而且鑰匙的上的編號與櫃子編號相同,你就可以無限的去開櫃子

3.實現機制:在第一次客戶請求時 產生一個Sessionid並賦值給Cookie的JSESSIONID,然后發給客戶端,最終通過Session的Sessionid和我們Cookie的JSESSIONID實現一個一一對應關系。

今日感悟:

頭等艙可以優先登機,銀行VIP可以不用排隊,

演唱會最貴的票同時位置也是最好的,

所以,

世界從不平等,

你有多努力,你就有多特殊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM