Session和Cookie

我們知道HTTP協(xié)議是無(wú)狀態(tài)的,那么在Web開(kāi)發(fā)中如何做好用戶(hù)的整個(gè)瀏覽過(guò)程的控制,最經(jīng)典的解決方案就是使用Cookie和Session。
Cookie是客戶(hù)端的機(jī)制,把用戶(hù)數(shù)據(jù)緩存在客戶(hù)端,而Session是服務(wù)端的機(jī)制,每個(gè)用戶(hù)都會(huì)被分配一個(gè)唯一的SessionID,可以通過(guò)url傳輸或保存在客戶(hù)端的Cookie中,也可以將Session保存在數(shù)據(jù)庫(kù)中,比如Redis中。

Session和Cookie是怎么來(lái)的?

假如你在瀏覽器上從來(lái)沒(méi)有登錄過(guò)GitHub,當(dāng)你第一次登錄的時(shí)候需要輸入用戶(hù)名和密碼進(jìn)行驗(yàn)證,通過(guò)驗(yàn)證后會(huì)調(diào)到個(gè)人首頁(yè),那么在登錄成功后你點(diǎn)擊你的某個(gè)代碼倉(cāng)庫(kù)的時(shí)候服務(wù)器如何驗(yàn)證你的身份呢?因?yàn)镠TTP協(xié)議是無(wú)狀態(tài)的,服務(wù)器并不知道你上次已經(jīng)驗(yàn)證過(guò)了,一種方法是每次請(qǐng)求都帶上用戶(hù)名和密碼,這顯然會(huì)導(dǎo)致用戶(hù)體驗(yàn)極差。那么就需要再客戶(hù)端或服務(wù)器上保存身份信息了,于是Cookie和Session就產(chǎn)生了。

Cookie

Cookie原理

Cookie就是本地計(jì)算機(jī)保存一些用戶(hù)操作的歷史信息,用戶(hù)再次訪問(wèn)時(shí)在HTTP請(qǐng)求頭中帶上Cookie信息,服務(wù)端就可以對(duì)其進(jìn)行驗(yàn)證。


數(shù)據(jù)內(nèi)容

Cookie本質(zhì)上是由瀏覽器管理存儲(chǔ)在客戶(hù)端的一小段文本,Chrome瀏覽器可以使用EditThisCookie插件來(lái)管理Cookie,如下圖所示。


會(huì)話Cookie和持久Cookie

  • 會(huì)話Cookie:Cookie是有有效期的,如果不設(shè)置過(guò)期時(shí)間,則表示這個(gè)Cookie的生命周期從創(chuàng)建到瀏覽器關(guān)閉為止,只要關(guān)閉瀏覽器Cookie就消失了,相當(dāng)于數(shù)據(jù)保存在內(nèi)存中,進(jìn)程結(jié)束就丟失了
  • 持久Cookie:如果設(shè)置了過(guò)期時(shí)間,瀏覽器會(huì)把Cookie數(shù)據(jù)保存到磁盤(pán)上,關(guān)閉瀏覽器再次打開(kāi)依然有效,直到Cookie過(guò)期,瀏覽器通常都使用的持久Cookie。

Session

Session原理

Session是服務(wù)器用來(lái)保存用戶(hù)操作的歷史信息的,使用SessionID來(lái)標(biāo)識(shí)Session,SessionID由服務(wù)器產(chǎn)生,保證隨機(jī)性和唯一性,相當(dāng)于一個(gè)隨機(jī)秘鑰,避免在傳輸中暴露用戶(hù)真實(shí)密碼,但是服務(wù)器仍要將請(qǐng)求對(duì)Session進(jìn)行對(duì)應(yīng),需要借助Cookie保存客戶(hù)端的標(biāo)識(shí)(SessionID)。


當(dāng)服務(wù)器需要對(duì)某個(gè)請(qǐng)求創(chuàng)建Session的時(shí)候,首先檢查這個(gè)客戶(hù)端的請(qǐng)求是否包含了SessionID,如果已經(jīng)包含則表示次客戶(hù)端之前已經(jīng)創(chuàng)建過(guò),只需要根據(jù)SessionID查詢(xún)對(duì)應(yīng)的Session。如果請(qǐng)求沒(méi)有攜帶SessionID,則會(huì)生成一個(gè)Session和對(duì)應(yīng)的SessionID,同時(shí)在本次響應(yīng)中返回SessionID。

參考

【1】build-web-application-with-golang

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容