【計算機網絡】Web 訪問中的 cookie, seesion, token

Web 訪問中的 cookie, seesion, token

cookie

HTTP cookie(也叫 Web Cookie 或瀏覽器 Cookie)是服務器發送到用戶瀏覽器並保存在本地的一小塊數據,它會在瀏覽器下次向同一服務器再發起請求時被攜帶併發送到服務器上。cookie 通常保存在客戶端瀏覽器上,有時候也會保存在服務端。單個 cookie 保存的數據一般小於 4 KB,一個站點最多保存 20 個 cookie。它只能保管 ASCII 字符串,需要通過編碼的方式存取 Unicode 字符或者二進制數據,因此難以利用 cookie 實現存儲略微複雜的信息。

保存用戶密碼或者用戶喜好

當我們登錄網站勾選保存用戶名和密碼的時候,一般保存的都是cookie,將用戶名和密碼的cookie保存到硬盤中,這樣再次登錄的時候瀏覽器直接將cookie發送到服務端驗證。相比於直接將用戶名和密碼保存到客戶端中,這樣的操作更加安全,瀏覽器也可以通過加密解密實現安全通信。用戶使用瀏覽器時的偏好的設置,也可以通過 cookie 保存到客戶端,這樣用戶登錄瀏覽器以後就可以直接拿到相應的偏好設置。

跟蹤會話

有時候一些網站的網頁有不同的訪問權限,有些只允許登錄的用戶進行訪問,或者用戶級別不同的不能訪問。但是 http 請求是無狀態的,每次訪問服務端時都不知道請求方是否爲登錄用戶,所以在 http 請求報文中加入登錄標識就可以了,這個登錄標識就是 cookie,這樣服務器端就能通過請求報文拿到登錄標識 cookie,進行比較後就可以確定會話身份了。

這些 cookie 是爲了實現跟蹤會話的目的,所以客戶端有,服務端也有,而且服務端會有全部的會話 cookie。可以通過設置 cookie 的屬性,達到 cookie 長期有效的效果。

session

Session 代表着服務器和客戶端一次會話的過程。session 對象存儲特定用戶會話所需的屬性及配置信息。這樣,當用戶在應用程序的 web 頁之間跳轉時,存儲在 session 對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。當客戶端關閉會話,或者 session 超時失效時會話結束。

session 技術是後來衍生出來的,也要使用到 cookie,通常保存在服務器端,用於跟蹤會話。session 的數量通常沒有上限,但出於對服務器端的性能考慮,session 內不要存放過多的東西,並且設置了 session 刪除機制。

它的出現,主要是考慮到安全問題。由於 http 是無狀態的協議,所以用戶每次讀取 web 頁面時,服務器都會打開新的會話,而且服務器不會自動維護客戶的上下文信息。session 就是一種保存上下文信息的機制,它針對每一個客戶,通過 seesionID 區分不同的客戶。它以 cookie 或者 url 重寫爲基礎,默認使用 cookie 來實現,與 cookie 不同的是,它是存儲在瀏覽器內存中,而不是寫到硬盤上的。

session 與 cookie 的關係

用戶第一次請求服務器的時候,服務器根據用戶提交的相關信息,創建創建對應的 Session ,請求返回時將此 Session 的唯一標識信息 SessionID 返回給瀏覽器,瀏覽器接收到服務器返回的 SessionID 信息後,會將此信息存入到 Cookie 中,同時 Cookie 記錄此 SessionID 屬於哪個域名。

當用戶第二次訪問服務器的時候,請求會自動判斷此域名下是否存在 Cookie 信息,如果存在自動將 Cookie 信息也發送給服務端,服務端會從 Cookie 中獲取 SessionID,再根據 SessionID 查找對應的 Session 信息,如果沒有找到說明用戶沒有登錄或者登錄失效,如果找到 Session 證明用戶已經登錄可執行後面操作。

根據以上流程可知,SessionID 是連接 Cookie 和 Session 的一道橋樑,大部分系統也是根據此原理來驗證用戶登錄狀態。

session 通常稱爲 session cookie,而 cookie 一般又稱爲 persistent cookie。前者針對單詞會話而言,會話結束那它也隨之消失;而後者通常是加密後存儲於客戶端硬盤上的一段文本信息,可能會遭到 cookie 欺騙以及針對 cookie 的腳本攻擊,自然在安全性上有所欠缺。

token

Token 機制多用於 App 客戶端和服務器交互的模式,也可以用於 Web 端做用戶狀態管理。當瀏覽器中禁止了 cookie,服務器端就無法再繼續根據 cookie 中的信息判斷用戶是否登錄,此時可以通過 token 機制來保障整個機制的正常運轉。

Token 的意思是“令牌”,是服務端生成的一串字符串,作爲客戶端進行請求的一個標識。Token 機制和 Cookie 和 Session 的使用機制比較類似。當用戶第一次登錄後,服務器根據提交的用戶信息生成一個 Token,響應時將 Token 返回給客戶端,以後客戶端只需帶上這個 Token 前來請求數據即可,無需再次登錄驗證。

token 是服務器端將用戶信息經過編碼後傳給客戶端。它具有以下優點:

  • 簡潔:可以通過 url 或者 post 參數或者是在 http 頭參數發送,因爲數據量小,傳輸速度也很快
  • 自包含:由於串包含了用戶所需要的信息,避免了多次查詢數據庫
  • 因爲 Token 是以 json 的形式保存在客戶端的,所以 JWT 是跨語言的
  • 不需要在服務端保存會話信息,特別適用於分佈式微服務
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章