天天看點

通路網址 token的格式_3 分鐘帶你深入了解 Cookie、Session、Token

經常會有使用者咨詢,CDN 是否會傳遞 Cookie 資訊,是否會對源站 Session 有影響,Token 的防盜鍊配置為什麼總是配置失敗?為此,我們就針對 Cookie、Session 和 Token,來談談它們的用處是什麼。

Cookie

Cookie 雖然聽起來不是技術名詞,但卻為網際網路提供一項至關重要的功能:“

記錄通路過的網站或正在通路的網站。

HTTP 協定是無狀态的,伺服器不知道浏覽器上一次通路做了什麼,也無法對使用者會話進行跟蹤連接配接。為此就引入 Cookie 技術,Cookie 是由伺服器發送到用戶端浏覽器的一小段文本檔案,包含了網站通路活動資訊。例如首選項語言或其它一些設定。浏覽器會儲存這些資料,并在用戶端下次通路該網站時調用它們,提供更友善和個性化的通路體驗。

舉個簡單的例子:我們在浏覽購物網站時,會将選購商品添加到購物車。如果沒有 Cookie 技術,因為 HTTP 是無狀态協定,它不會知道之前添加選購哪些商品,放在哪個使用者的購物車中。而應用 Cookie 技術後,Cookie 才會将這些資訊在會話中發送給伺服器,伺服器讀取 Cookie 資訊就知道是哪些使用者購物車中添加的商品資訊。

通路網址 token的格式_3 分鐘帶你深入了解 Cookie、Session、Token

Cookie 的屬性,就意味着它會暴露使用者的一些隐私。Cookie 存放了用戶端留在網站的資訊,它會根據使用者喜好和通路資訊記錄,推送一些使用者喜歡的資訊。我們在浏覽網頁中,常常看到線上廣告,大多數線上廣告就是依附 Cookie 技術對用戶端浏覽器進行推廣,在網頁中顯示相關度較高的廣告。

通路網址 token的格式_3 分鐘帶你深入了解 Cookie、Session、Token

Session

Session 表示的是 C/S 架構中伺服器和用戶端一次會話的過程,用來儲存認證使用者資訊。Session 是一種 HTTP 存儲機制,目的是為無狀态的 HTTP 提供持久機制。這樣使用者在應用程式的 Web 頁面跳轉時,就不會因為 HTTP 無狀态的性質導緻對話丢失,進而使通路會話一直保持下去。

伺服器端存儲使用者資料資訊。必須知道每個使用者分别是誰,那麼每個使用者必須有個名字,或者說是 ID,這就是所謂的“Session ID”。使用者請求後,伺服器會生成 Session ID 并返還,後續使用者的每次請求,都會帶上這個 Session ID,然後伺服器通過在資料庫的搜尋對應,找到該使用者及其相關資訊,比如對應的使用者是登入狀态還是逾時登出之類的。

資訊狀态存在伺服器端,使用者隻需要留存 Session ID。大多數時候通過 Cookie 傳遞存放,當然也可以用 ajax 傳,存 Local Storage 或 Session Storage 或 IndexDB 或 Web SQL,反正隻要使用者拿到并存着就行,甚至可以用 URL 重寫的方式傳遞。

比如:二狗子在 http://www.a.com/login.php 網站中登陸,同時希望 http://www.a.com/index.php 也是登陸狀态。但這是兩個不同的頁面和 HTTP 請求,并且 HTTP 是無狀态協定,是無關聯的,也就無法在 /index.php 中讀取 /login.php 登陸狀态。于是我們就可以依靠 Session 會話技術,它通過保持會話的方式,将多次 HTTP 請求關聯到一個會話中,保持資料傳輸的完整性。

通路網址 token的格式_3 分鐘帶你深入了解 Cookie、Session、Token

Token

Token 是“令牌”的意思,主要是用于身份的驗證方式。以又拍雲的 Token 防盜鍊為例,Token 通過對時間相關的字元串進行簽名,将時間、簽名資訊通過一定的方式傳遞給 CDN 節點伺服器作為判定依據,CDN 邊緣節點依據約定的算法判斷來訪的 URL 是否有通路權限。如果通過,執行下一步;如果不通過,響應 HTTP 403 狀态碼或者通過 302 跳轉到其他 URL。

通路網址 token的格式_3 分鐘帶你深入了解 Cookie、Session、Token

如上圖所示,整個 Token 防盜鍊的實作需要如下幾個部分來配合:

  • 用戶端:負責發送原始請求給用戶端業務伺服器以及發送帶簽名的 URL 給 CDN 節點進行驗證;
  • 業務伺服器:根據約定的算法生成帶 _upt 參數的 URL 傳回給用戶端;
  • CDN 節點:負責和用戶端進行時間、簽名校驗;

Token 的實作方式

在了解 Token 實作需要用戶端、伺服器端、CDN 節點來配合後,再來簡單看下 Token 具體是如何實作的:

步驟1:用戶端業務伺服器生成驗證資訊,驗證資訊的生成由業務伺服器負責,具體的加密過程需要确認如下事項:

  • 确認過期時間的格式,預設采用 UNIX 時間戳格式
  • 确認驗證資訊中的密文,使用者計算驗證資訊,需要和 CDN 平台約定
  • 确認驗證資訊時加入的參數,預設為 URL 的路徑部分
  • 根據上文的算法說明計算驗證資訊,其中請求 URL 中的驗證參數為 _upt

步驟2:CDN 節點驗證過程

  • 根據約定解析取出過期時間,和目前 CDN 節點伺服器時間進行比較,确認請求是否過期
  • 根據上文約定好的算法計算方式,計算出 MD5 加密串後,和 URL 中的加密串進行比較,驗證加密串是否一緻

如果以上兩個步驟都驗證通過,請求才會被認為是合法的,這時 CDN 會請求資源響應給用戶端,否則會被認為是非法請求,直接響應 HTTP status code 403。

最後,做下簡單的總結:

Cookie 存放在用戶端,用來儲存用戶端會話資訊。由于存儲在用戶端,它的安全性不能完全保證。

Session 存放在伺服器端,使用者驗證用戶端資訊。如果把 Cookie 比喻成電話号碼,那麼 Session 就是記錄所有人資訊的電話簿。由于存儲在伺服器,安全性有一定的保證。

Token 是一種認證方式。通過預定的規則來計算 Token 值并發送給伺服器進行通路驗證。

讀完這篇文章,我相信你已經對 Cookie、Session、Token 有詳盡的了解了。

推薦閱讀:

Token 防盜鍊詳解​www.upyun.com

通路網址 token的格式_3 分鐘帶你深入了解 Cookie、Session、Token

使用Token防盜鍊實作釋出内容私有化​www.upyun.com

通路網址 token的格式_3 分鐘帶你深入了解 Cookie、Session、Token

繼續閱讀