1. 程式人生 > >Http Cookie機制及Cookie的實現原理

Http Cookie機制及Cookie的實現原理

轉自:https://itbilu.com/other/relate/4J4n8fIPe.html

Cookie是進行網站使用者身份,實現服務端Session會話持久化的一種非常好方式。Cookie最早由Netscape公司開發,現在由 IETF 的RFC 6265標準備對其規範,已被所有主流瀏覽器所支援。

 

HTTP是一種無狀態的協議,客戶端與伺服器建立連線並傳輸資料,資料傳輸完成後,連線就會關閉。再次互動資料需要建立新的連線,因此,伺服器無法從連線上跟蹤會話,也無法知道使用者上一次做了什麼。這嚴重阻礙了基於Web應用程式的互動,也影響使用者的互動體驗。如:在網路有時候需要使用者登入才進一步操作,使用者輸入使用者名稱密碼登入後,瀏覽了幾個頁面,由於HTTP的無狀態性,伺服器並不知道使用者有沒有登入。

Cookie是解決HTTP無狀態性的有效手段,伺服器可以設定或讀取Cookie中所包含的資訊。當用戶登入後,伺服器會發送包含登入憑據的Cookie到使用者瀏覽器客戶端,而瀏覽器對該Cookie進行某種形式的儲存(記憶體或硬碟)。使用者再次訪問該網站時,瀏覽器會發送該Cookie(Cookie未到期時)到伺服器,伺服器對該憑據進行驗證,合法時使使用者不必輸入使用者名稱和密碼就可以直接登入。

本質上講,Cookie是一段文字資訊。客戶端請求伺服器時,如果伺服器需要記錄使用者狀態,就在響應使用者請求時傳送一段Cookie資訊。客戶端瀏覽器儲存該Cookie資訊,當用戶再次訪問該網站時,瀏覽器會把Cookie

做為請求資訊的一部分提交給伺服器。伺服器檢查Cookie內容,以此來判斷使用者狀態,伺服器還會對Cookie資訊進行維護,必要時會對Cookie內容進行修改。

 

Cookie總時由使用者客戶端進行儲存的(一般是瀏覽器),按其儲存位置可分為:記憶體式Cookie和硬碟式Cookie

記憶體式Cookie儲存在記憶體中,瀏覽器關閉後就會消失,由於其儲存時間較短,因此也被稱為非持久Cookie會話Cookie

硬碟式Cookie儲存在硬碟中,其不會隨瀏覽器的關閉而消失,除非使用者手工清理或到了過期時間。由於硬碟式Cookie儲存時間是長期的,因此也被稱為持久Cookie

 

Cookie定義了一些HTTP請求頭和HTTP響應頭,通過這些HTTP頭資訊使伺服器可以與客戶進行狀態互動。

客戶端請求伺服器後,如果伺服器需要記錄使用者狀態,伺服器會在響應資訊中包含一個Set-Cookie的響應頭,客戶端會根據這個響應頭儲存Cookie資訊。再次請求伺服器時,客戶端會在請求資訊中包含一個Cookie請求頭,而伺服器會根據這個請求頭進行使用者身份、狀態等較驗。

下面是一個實現Cookie機制的,簡單的HTTP請求過程:

Http Cookie機制及Cookie的實現原理

1. 客戶端請求伺服器

客戶端請求IT筆錄網站首頁,請求頭如下:

GET / HTTP/1.0
HOST: itbilu.com

2. 伺服器響應請求

Cookie是一種key=value形式的字串,伺服器需要記錄這個客戶端請求的狀態,因此在響應頭中包一個Set-Cookie欄位。響應頭如下:

HTTP/1.0 200 OK
Set-Cookie: UserID=itbilu; Max-Age=3600; Version=1
Content-type: text/html
……

3. 再次請求時,客戶端請求中會包含一個Cookie請求頭

客戶端會對伺服器響應的Set-Cookie頭資訊進行儲存。再次請求時,將會在請求頭中包含伺服器響應的Cookie資訊。請求頭如下

GET / HTTP/1.0
HOST: itbilu.com
Cookie: UserID=itbilu