🍀Cookie簡介
HTTP協議自身是屬于 "?狀態"協議.
"?狀態"的含義指的是:
- 默認情況下 HTTP 協議的客?端和服務器之間的這次通信,和下次通信之間沒有直接的聯系.但是實際開發中,我們很多時候是需要知道請求之間的關聯關系的.
例如登陸?站成功后,第?次訪問的時候服務器就能知道該請求是否是已經登陸過了.
?
上圖中輸入用戶名和密碼,點擊登錄之后,將這個登錄請求發送給服務器,這個請求攜帶著用戶名密碼信息發送給服務器,服務器將用戶名和密碼進行存儲(session),生成一個sessionId(sessionId對應session信息)返回給客戶端,存于cookie中,訪問其他頁面時就可以攜帶cookie進行訪問。
上述圖中的"令牌"通常就存儲在Cookie字段中. ?如去醫院掛號
- 看病之前先掛號.掛號時候需要提供?份證號,同時得到了?張"就診卡",這個就診卡就相當于患 者的"令牌".
- 后續去各個科室進?檢查,診斷,開藥等操作,都不必再出??份證了,只要憑就診卡即可識別出當 前患者的?份.
- 看完病了之后,不想要就診卡了,就可以注銷這個卡.此時患者的?份和就診卡的關聯就銷毀了.(類 似于?站的注銷操作)
- ?來看病,可以辦?張新的就診卡,此時就得到了?個新的"令牌"
此時在服務器這邊就需要記錄"令牌"信息,以及令牌對應的??信息,這個就是 Session 機制所做的?作
🎄理解Session
要理解Session,我們先來理解一下會話
在計算機領域,會話是?個客?與服務器之間的不中斷的請求響應.對客?的每個請求,服務器能夠識別出請求來?于同?個客?.
當?個未知的客?向Web應?程序發送第?個請求時就開始了?個會話.當客?明確結束會話或服務器在?個時限內沒有接受到客?的任何請求時,會話就結束了.
?如我們打客服電話
每次打客服電話,是?個會話.掛斷電話,會話就結束了
下次再打客服電話,?是?個新的會話.
如果我們?時間不說話,沒有新的請求,會話也會結束
服務器同?時刻收到的請求是很多的.服務器需要清楚的區分每個請求是從屬于哪個??,也就是屬于哪個會話,就需要在服務器這邊記錄每個會話以及與??的信息的對應關系.
Session是服務器為了保存??信息?創建的?個特殊的對象
Session的本質就是?個"哈希表",存儲了?些鍵值對結構.Key 就是SessionID,Value就是??信息(??信息可以根據需求靈活設計).
SessionId 是由服務器?成的?個"唯?性字符串",從Session機制的?度來看,這個唯?性字符串稱 為SessionId .但是站在整個登錄流程中看待,也可以把這個唯?性字符串稱為token .
上述例?中的令牌ID,就可以看做是SessionId,只不過令牌除了ID之外,還會帶?些其他信息,?如時 間,簽名等.
- 當??登陸的時候,服務器在 Session 中新增?個新記錄, 把 sessionId返回給客?端.(通過HTTP 響應中的 Set-Cookie 字段返回).
- 客?端后續再給服務器發送請求的時候,需要在請求中帶上sessionId.(通過HTTP請求中的Cookie字段帶上).
- 服務器收到請求之后,根據請求中的sessionId在Session信息中獲取到對應的??信息,再進?后續操作.找不到則重新創建Session,并把SessionID返回
Session 默認是保存在內存中的. 如果重啟服務器則 Session 數據就會丟失
🌳Cookie 和 Session 的區別
- Cookie 是客?端保存??信息的?種機制.Session 是服務器端保存??信息的?種機制.
- Cookie 和 Session之間主要是通過 SessionId 關聯起來的, SessionId是 Cookie 和 Session 之間的橋梁
- Cookie 和 Session 經常會在?起配合使?. 但是不是必須配合
- ? ? ? ? ?完全可以? Cookie 來保存?些數據在客?端.這些數據不?定是???份信息,也不?定? ? ? ? ? ?是SessionId
- ? ? ? ? ?Session 中的sessionId 也不需要?得通過 Cookie/Set-Cookie 傳遞,?如通過URL傳遞