關於Session和Cookie

李育歡發表於2020-11-27

寫在前頭:

輸入URL發生了什麼
1、瀏覽器向 DNS 伺服器請求解析該 URL 中的域名所對應的 IP 地址;
2、解析出 IP 地址後,根據該 IP 地址和預設埠 80,和伺服器建立TCP連線;
3、瀏覽器發出讀取檔案(URL 中域名後面部分對應的檔案)的HTTP 請求,該請求報文作為 TCP 三次握手的第三個報文的資料傳送給伺服器;
4、伺服器對瀏覽器請求作出響應,並把對應的 html 文字傳送給瀏覽器;
5、釋放 TCP連線;
6、瀏覽器將該 html 文字並顯示內容

一.Session

1.Session是啥??

資料儲存在伺服器
Session 代表著伺服器和客戶端一次會話的過程。Session 物件儲存特定使用者會話所需的屬性及配置資訊。這樣,當使用者在應用程式的 Web 頁之間跳轉時,儲存在 Session 物件中的變數將不會丟失,而是在整個使用者會話中一直存在下去。當客戶端關閉會話,或者 Session 超時失效時會話結束。

2.工作原理

session是一種伺服器端的資訊管理機制,它把這些檔案資訊以檔案的形式存放在伺服器的硬碟空間上(這是預設情況,可以用memcache把這種資料放到記憶體上面)當客戶端向伺服器發出請求時,要求伺服器產生一個session時,伺服器會檢查一下客戶端的cookie裡面有沒有sessionid以及它是否過期,如果有sessionid,伺服器會根據cookie裡的sessionid把伺服器的session檢索出來,如果沒有這樣的sessionid的話,伺服器會重新建立一個(隨機生成),同一客戶端啟動二次session的話,sessionid是不一樣的

二.Cookie

1.Cookie是啥???

資料儲存在瀏覽器
HTTP Cookie(也叫 Web Cookie或瀏覽器 Cookie)是伺服器傳送到使用者瀏覽器並儲存在本地的一小塊資料,它會在瀏覽器下次向同一伺服器再發起請求時被攜帶併傳送到伺服器上。通常,它用於告知服務端兩個請求是否來自同一瀏覽器,如保持使用者的登入狀態。Cookie 使基於無狀態的 HTTP 協議記錄穩定的狀態資訊成為了可能。

2.工作原理

位於使用者的計算機上,用來維護使用者計算機中的資訊,直到使用者刪除。比如我們在網頁上登入某個軟體時輸入使用者名稱及密碼時如果儲存為cookie,則每次我們訪問的時候就不需要登入網站了。我們可以在瀏覽器上儲存任何文字,而且我們還可以隨時隨地的去阻止它或者刪除。我們同樣也可以禁用或者編輯cookie,但是有一點需要注意不要使用cookie來儲存一些隱私資料,以防隱私洩露

3.應用

  • 會話狀態管理(如使用者登入狀態、購物車、遊戲分數或其它需要記錄的資訊)

  • 個性化設定(如使用者自定義設定、主題等)

  • 瀏覽器行為跟蹤(如跟蹤分析使用者行為等)

4.作用

HTTP請求是無狀態的,使用Cookie可以用來儲存狀態資訊。例如可以用來儲存Session ID

5.生命週期

可對Cookie設定過期時間,若不設定則預設為瀏覽器會話期間,關閉瀏覽器視窗,cookie就消失。

三.Session和Cookie的不同

1.作用範圍不同,Cookie 儲存在客戶端(瀏覽器),Session 儲存在伺服器端。

2.存取方式的不同,Cookie 只能儲存 ASCII,Session 可以存任意資料型別,一般情況下我們可以在 Session 中保持一些常用變數資訊,比如說 UserId 等。

3.有效期不同,Cookie 可設定為長時間保持,比如我們經常使用的預設登入功能,Session 一般失效時間較短,客戶端關閉或者 Session 超時都會失效。

4.隱私策略不同,Cookie 儲存在客戶端,比較容易遭到不法獲取,早期有人將使用者的登入名和密碼儲存在 Cookie 中導致資訊被竊取;Session 儲存在服務端,安全性相對 Cookie 要好一些。

5.儲存大小不同, 單個 Cookie 儲存的資料不能超過 4K,Session 可儲存資料遠高於 Cookie。
6.瀏覽器支援不同:Cookie是需要瀏覽器支援的。假如瀏覽器禁用了cookie,則不能使用cookie

7.跨域支援上的不同:Cookie支援跨域訪問。Session不支援

四.為什麼需要Session和Cookie

說起來為什麼需要 Cookie ,這就需要從瀏覽器開始說起,我們都知道瀏覽器是沒有狀態的(HTTP 協議無狀態),這意味著瀏覽器並不知道是張三還是李四在和服務端打交道。這個時候就需要有一個機制來告訴服務端,本次操作使用者是否登入,是哪個使用者在執行的操作,那這套機制的實現就需要 Cookie 和 Session 的配合。
Session和Cookie的配合過程
在這裡插入圖片描述

使用者第一次請求伺服器的時候,伺服器根據使用者提交的相關資訊,建立對應的 Session ,請求返回時將此 Session 的唯一標識資訊 SessionID 返回給瀏覽器,瀏覽器接收到伺服器返回的 SessionID 資訊後,會將此資訊存入到 Cookie 中,同時 Cookie 記錄此 SessionID 屬於哪個域名。
當使用者第二次訪問伺服器的時候,請求會自動判斷此域名下是否存在 Cookie 資訊,如果存在自動將 Cookie 資訊也傳送給服務端,服務端會從 Cookie 中獲取 SessionID,再根據 SessionID 查詢對應的 Session 資訊,如果沒有找到說明使用者沒有登入或者登入失效,如果找到 Session 證明使用者已經登入可執行後面操作。
SessionID 是連線 Cookie 和 Session 的一道橋樑,大部分系統也是根據此原理來驗證使用者登入狀態。

五.為什麼說session比cookie更加安全

cookie是存在使用者的瀏覽器中的,是可以被惡意程式獲取並加以利用的,http本身就不安全,只要是存在cookie中的資料都可以獲取到並加以利用,但是session的安全性也是相對的,由於資料儲存在資料庫中,就算sessionId被獲取利用,但是session中的資料並不會被惡意程式獲取,所以使用http協議的網頁本身就不會帶有較為敏感的資訊(如支付),如果涉及到一些敏感的資訊,並不希望被輕易獲取到,還是建議使用HTTPS協議

相關文章