Session 簡介

admin發表於2019-10-21

理解Session可以從其名稱入手,翻譯成漢語具有"會話"的意思。

所謂的會話是一段有始有終的互動操作,比如通過手機與朋友進行語音通話。

特別說明:Session與sessionStorage並無聯絡,只因名稱有所關聯所以做一下介紹。

一.HTTP(s)無狀態協議:

所謂無狀態,是指兩次請求之間是絕對獨立的,毫無關聯。

雖然無狀態協議簡單高效,但是也隨之帶來了其他困擾。

比如在A頁面使用者登入軸,再去訪問B頁面,但是由於兩者毫無關聯,B頁面顯示未登入狀態。

事實是,絕大多數線上網站都能夠很好的維持會話狀態,A頁面登入,B頁面同樣能夠保持登入狀態。

二.Session的誕生:

為了維持會話狀態,可以通過Cookie實現。

但Cookie內容位於客戶端,並處於可見狀態,安全性較低。

所以出現位於伺服器端的Session來維持會話狀態。

三.Session功能概述:

文章起始位置已經介紹,Session翻譯成漢語具有"會話"的意思。

不同語境下,含義也有所不同,WEB中,Session通常指伺服器端維護會話狀態的物件。

Session物件在伺服器端建立,可以儲存於檔案或者資料庫等位置,可以將使用者等相關資訊儲存於此物件中。

下面簡述一下此物件是如何運作的,不涉及具體語言:

(1).客戶端向伺服器發起HTTP(S)請求。

(2).伺服器端收到請求,並執行指定的程式碼建立一個Session物件。

(3).請求使用者可能成千上萬,要維護會話狀態,必須要進行身份識別。

(4).在Session物件建立的時候會生成一個session_id,用於唯一標識當前請求使用者的身份。

(5).通過伺服器響應將此session_id傳送到客戶端,並儲存於cookie中。

(6).當再次傳送HTTP(S)請求,session_id會隨同傳送到伺服器。

(7).然後根據此session_id進行身份識別,找到對應的Session物件,並獲取相關使用者資訊。

下面是HTTP請求頭部資訊簡單演示:

[HTML] 純文字檢視 複製程式碼
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value
Other-header: other-header-value

伺服器響應,通過Set-Cookie將session_id儲存到客戶端cookie中。

[HTML] 純文字檢視 複製程式碼
GET /index.html HTTP/1.1
Cookie: name=value
Other-header: other-header-value

客戶端再次發出請求時,在通過Cookie將session_id傳送到伺服器進行比對。