一文掌握Spring Cookie和Session 是什么及區(qū)別介紹
HTTP 協(xié)議自身是屬于“無狀態(tài)”協(xié)議
- 無狀態(tài):默認情況下,HTTP 協(xié)議的客戶端和服務(wù)器之間的這次通信和下次通信之間沒有直接的聯(lián)系
但是在實際開發(fā)中,我們很多時候是需要知道請求之間的關(guān)聯(lián)關(guān)系的
- 例如登錄網(wǎng)站成功后,第二次訪問的時候服務(wù)器就能知道該請求是否是已經(jīng)登錄過了

上述圖片中的“令牌”通常就存儲在 Cookie 字段中
比如去醫(yī)院掛號:
- 看病之前先掛號,掛號時需要提供身份證號,同時得到一張“就診卡”,這個就診卡就相當于患者的“令牌”
- 后續(xù)去各個科室進行檢查、診斷、開藥等操作,都不必再出示身份證了,只要憑“就診卡”就可以識別出當前患者的身份
- 看完病之后,不想要就診卡了,就可以注銷這個卡。此時患者的身份和就診卡的關(guān)聯(lián)關(guān)系就被銷毀了(類似于網(wǎng)站的注銷功能)
- 又來看病,可以辦一張新的就診卡,此時就得到了一個新的“令牌”
此時在服務(wù)器這邊就需要記錄“令牌”的信息,以及令牌對應(yīng)的用戶信息,這個就是 Session 機制所做的工作
理解 Session
會話就是對話的意思

在計算機領(lǐng)域,會話是一個客戶與服務(wù)器之間的不中斷的請求響應(yīng)。對客戶的每個請求,服務(wù)器能夠識別出請求來自于同一個客戶。當一個未知的客戶向 Web 應(yīng)用程序發(fā)送第一個請求時就開始了一個會話。當客戶明確結(jié)束會話或服務(wù)器在一個時限內(nèi)沒有收到客戶的任何請求時,會話就結(jié)束了
比如我們打客服電話
- 每次打客服電話,都是一個會話,掛斷電話,會話就結(jié)束了
- 下次再打客服電話,就又是一個新的會話
- 如果我們長時間不說話,沒有新的請求,會話也會結(jié)束
服務(wù)器同一時刻收到的請求時很多的。服務(wù)器需要清楚地區(qū)分每個請求時從屬于哪個用戶,也就是屬于哪個會話,就需要在服務(wù)器這邊記錄每個會話以及與用戶的信息的對應(yīng)關(guān)系
Session 是服務(wù)器為了保存用戶信息而創(chuàng)建的一個特殊的對象

Session 的本質(zhì)就是一個“哈希表”,存儲了一些鍵值對結(jié)構(gòu)。Key 就是 Session,Value 就是用戶信息(用戶信息可以根據(jù)需求靈活設(shè)計)


SessionId是由服務(wù)器生成的一個“唯一性字符串”,從Session機制的角度來看,這個唯一性字符串稱為“SessionId”。但是站在整個登錄流程中看待,也可以把這個唯一性字符串稱為“token”- 上述例子中的令牌 ID,就可以看做是
SessionId,只不過令牌除了 ID 之外,還會帶一些其他信息,比如時間、簽名等
token 和 SessionId 是相似的,但是不一樣。token 是身份的證明,SessionId 是其中一種實現(xiàn)方式

- 當用戶登錄的時候,服務(wù)器在
Session中新增一個新紀錄,并把SessionId返回給客戶端(通過 HTTP 響應(yīng)中的Set-Cookie字段返回) - 客戶端后續(xù)再給服務(wù)器發(fā)送請求的時候,需要在請求中帶上
SessionId(通過 HTTP 請求中的Cookie字段帶上) - 服務(wù)器收到請求之后,根據(jù)請求中的
SessionId在Session信息中獲取到對應(yīng)的用戶信息,再進行后續(xù)操作。若找不到,則重新創(chuàng)建Session,并把SessionId返回
Session 默認是保存在內(nèi)存中的。如果重啟服務(wù)器,則 Session 數(shù)據(jù)就會丟失
Cookie 和 Session 的區(qū)別
Cookie是客戶端保存用戶信息的一種機制。Session是服務(wù)器端保存用戶信息的一種機制Cookie和Session之間主要是通過SessionId關(guān)聯(lián)起來的,SessionId是Cookie和Session之間的橋梁Cookie和Session經(jīng)常會在一起配合使用,但不是必須配合- 完全可以用
Cookie來保存一些數(shù)據(jù)在客戶端。這些數(shù)據(jù)不一定是用戶身份信息,也不一定是SessionId Session中的SessionId也不需要非得通過Cookie/Set-Cookie來傳遞,比如通過URL來傳遞
- 完全可以用
到此這篇關(guān)于一文掌握Spring Cookie和Session 是什么的文章就介紹到這了,更多相關(guān)Spring Cookie和Session內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java中數(shù)組list map三者之間的互轉(zhuǎn)介紹
java中 數(shù)組 list map之間的互轉(zhuǎn)一張圖清晰呈現(xiàn)并附有代碼,不懂的朋友可以參考下2013-10-10
mybatis 通過攔截器打印完整的sql語句以及執(zhí)行結(jié)果操作
這篇文章主要介紹了mybatis 通過攔截器打印完整的sql語句以及執(zhí)行結(jié)果操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
Rabbitmq延遲隊列實現(xiàn)定時任務(wù)的方法
這篇文章主要介紹了Rabbitmq延遲隊列實現(xiàn)定時任務(wù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05

