之前總是對session和cookie這兩個概念很模糊,今天就研究下他們的原理和關係
在說session和cookie之前,我們先來說說session和cookie出現的原因
眾所周知,http是無狀態的,也就是說在客戶端和伺服器連線期間,客戶端向伺服器傳送的請求是不帶使用者資訊的,所以我們是無法辨別出這個請求是哪個使用者發出的。
為了解決這個問題,就得藉助其他技術,cookie和session就由此誕生
首先需要闡明的一點:session是一種網路通訊的會話機制,而cookie只是實現這種機制的主流方案中的一個,cookie一般是用來儲存sessionID的
Cookie原理
Cookie是儲存在客戶端的一段資料,通常記錄一些網站的密碼和使用者名稱等,當客戶端傳送請求的時候,服務端需要記住這個使用者的資訊,就在返回給前端的資料中設定Cookie,客戶端接受到這個請求後,會把Cookie儲存起來,當再次訪問伺服器的時候將會帶上這個Cookie,伺服器通過這個Cookie來獲取使用者狀態
基本過程:

Cookie有很多的引數,可以根據這些引數設定Cookie的過期時間和是否能被js更改等

如果客戶端禁用了Cookie,通常客戶端會採用url重寫技術,比如會在url後面加上一個諸如sid=xx的引數
Session原理
session是儲存在服務端的,當使用者登入系統後,服務端會根據一個演算法,生成一個sessionID,這個sessionID唯一標識一個會話,服務端將這個sessionID儲存在記憶體中,資料庫或者檔案當中,並設定一定的有效期,並將sessionID寫入到Cookie當中返回給客戶端,當下一次客戶端請求的時候會帶上sessionID,服務端會將客戶端中的Cookie與服務端中記錄的進行比較,從而確定一個會話
基本過程:

參考連結: