Session原理

無狀態(tài)的 HTTP 協(xié)議

還記得每當入門一門 Web 端語言的進行服務器端開發(fā)的時候,僅次于「Hello World」的 demo 就是「登錄功能」了。實現(xiàn)登錄功能很簡單,驗證客戶端發(fā)送過來的賬戶和密碼,如果通過驗證就把用戶塞進 session 中,然后在后續(xù)的訪問中,只需檢測 session 是否有這個用戶就能知道用戶是否登錄了。Session 的中文翻譯為:「會話」,只屬于某一個客戶端和某一個服務器端溝通的工具。但,計算機網(wǎng)絡老師又說了,HTTP 協(xié)議是無狀態(tài)的,怎么能記錄用戶的登錄狀態(tài)呢?
鑒于 HTTP 是無狀態(tài)協(xié)議,之前已認證成功的用戶狀態(tài)是無法通過協(xié)議層面保存下來的,既,無法實現(xiàn)狀態(tài)管理,因此即使當該用戶下一次繼續(xù)訪問,也無法區(qū)分他和其他的用戶。于是我們會使用 Cookie 來管理 Session,以彌補 HTTP 協(xié)議中不存在的狀態(tài)管理功能。

利用 Cookie 管理 Session

Session 管理及 Cookie 狀態(tài)管理
  • 步驟 1:客戶端把用戶 ID 和密碼等登錄信息放入報文的實體部分,通常是以 POST 方法把請求發(fā)送給服務器。

  • 步驟 2:服務器會發(fā)放用以識別用戶的 Session ID。通過驗證從客戶端發(fā)送過來的登錄信息進行身份驗證,然后把用戶的認證狀態(tài)與 Session ID 綁定后記錄在服務器端。向客戶端返回響應時,會在首部字段 Set-Cookie 內(nèi)寫入 Session ID。

  • 步驟 3:客戶端接收到從服務器端發(fā)來的 Session ID 后,會將其作為 Cookie 保存在本地。下次向服務器發(fā)送請求時,瀏覽器會自動發(fā)送 Cookie,所以 Session ID 也隨之發(fā)送到服務器。服務器端可通過驗證接收到的 Session ID 識別用戶和其認證狀態(tài)。

為 Cookie 服務的 HTTP 首部字段

  • Set-Cookie
  • Cookie

Set-Cookie

服務器管理狀態(tài)使用到的字段,用于響應首部
一則響應首部的 Set-Cookie 字段:

Set-Cookie: status=enable; expires= Tue, 05 Jul 2011 07:26:31 GMT; path=/; domain=.hackr.jp;

Set-Cookie 字段的屬性:

屬性 說明
NAME=VALUE 賦予 Cookie 的名稱和其值(必須項)
expires=DATE Cookie 的有效期(若不明確指定則默認為瀏覽器關閉前為止)
path=PATH 將服務器上的文件目錄作為 Cookie 的適用對象(若不指定則默認為文檔所在的目錄)
domain=域名 作為 Cookie 適用對象的域名(若不指定則默認為創(chuàng)建 Cookie 的服務器的域名)
Secure 僅在 HTTPS 安全通信時才會發(fā)送 Cookie
HttpOnly 加以限制,使 Cookie 不能被 Javascript 腳本訪問

Cookie

首部字段 Cookie 會告知服務器,當客戶端想獲得 HTTP 狀態(tài)管理支持時,就會在請求中包含從服務器接收到的 Cookie。接收到多個 Cookie 時,同樣可以以多個 Cookie 形式發(fā)送。


如果本文對您有用
請不要吝嗇你們的Follow與Start
這會大大支持我們繼續(xù)創(chuàng)作

「Github」
MZMonster :@MZMonster
JC_Huang :@JerryC8080

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內(nèi)容