HTTP協議Cookie和Session有什麼區別

南風1789發表於2020-12-20

為什麼會有COOKIE這種機制

首先一種場景, 在一個網站上面, 我發起一次請求,那伺服器怎麼知道我是誰?是誰發起的這次請求呢, HTTP協議是無狀態的協議, 瀏覽器的每一次請求,伺服器都當做一次新請求, 但是在實際應用中我們需要知道這個請求來自於誰,需要查詢哪些資訊返回給訪問者,

這個時候就引入了COOKIE機制, COOKIE機制是什麼呢? 其實就是伺服器給客戶端返回資料的時候,中間加了一個標識, 然後客戶端再次請求資料的時候,資料中帶上這個標識, 那麼伺服器接收到請求訊息時就知道這個請求來自於誰了(相當於伺服器接收到請求時,如果沒有帶識別碼,生成一個識別碼給客戶端, 如果有識別碼,就把這個識別碼需要的對應內容返回給客戶端)

cookie儲存在客戶端,比較不安全;session儲存在伺服器端,比較安全。

cookie目的可以跟蹤會話,也可以儲存使用者喜好或者儲存使用者名稱密碼,session用來跟蹤會話。

建議使用者名稱,密碼儲存在session,其它資訊可儲存在cookie。

先來了解一下各自的工作機制
在這裡插入圖片描述

cookie的工作機制

1、伺服器向客戶端響應請求的時候,會在響應頭中設定set-cookie的值,其值的格式通常是name = value的格式

2、瀏覽器將 cookie 儲存下來

3、每次請求瀏覽器都會自動將 cookie 發向伺服器

4、cookie最初是在客戶端用於儲存會話資訊的。

在這裡插入圖片描述

session的工作機制

1、當客戶端第一次請求session物件時,伺服器會建立一個session,並通過特殊演算法算出一個session的ID,用來標識該session物件,然後將這個session序列放置到set-cookie中傳送給瀏覽器

2、瀏覽器下次發請求的時候,這個sessionID會被放置在請求頭中,和cookie一起傳送回來

3、伺服器再通過記憶體中儲存的sessionID跟cookie中儲存的sessionID進行比較,並根據ID在記憶體中找到之前建立的session物件,提供給請求使用,也就是伺服器會通過session儲存一個狀態記錄,瀏覽器會通過cookie儲存狀態記錄,伺服器通過兩者的對比實現跟蹤狀態,這樣的做,也極大的避免了cookie被篡改而帶來的安全性問題

4、由於cookie可以被人為的禁止,必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞迴伺服器。經常被使用的一種技術叫做URL重寫,就是把session id直接附加在URL路徑的後面,附加方式也有兩種,一種是作為URL路徑的附加資訊,另一種是作為查詢字串附加在URL後面

總之,cookie、session都會儲存在瀏覽器,都會向伺服器請求,只是實現的工作機制不同,使用的場景不同。

相關文章