Cookie、Session、Token 等驗證服務

一 Cookie、Session、Token
1.Cookie

服務器生成傳至瀏覽器並以文本文件形式存放至本地瀏覽器指定目錄下,能夠永久儲存。
若不設置過期時間,則表示這個 Cookie 的生命期爲瀏覽器會話期間,關閉瀏覽器窗口, Cookie 就消失。這種生命期爲瀏覽器會話期的 Cookie 被稱爲會話 Cookie 。會話 Cookie 一般不存儲在硬盤上而是保存在內存裏,當然這種行爲並不是規範規定的。
若設置了過期時間,瀏覽器就會把 Cookie 保存在硬盤上,關閉後再次打開瀏覽器,這些 Cookie 仍然有效直到超過設定的過期時間。存儲在硬盤上的 Cookie 可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對於保存在內存裏 Cookie ,不同的瀏覽器有不同的處理方式。

Cookie 的組成有:名稱(key)、值(value)、有效域(domain)、路徑(域的路徑,一般設置爲全局:"\")、失效時間、安全標誌(指定後,cookie只有在使用SSL連接時才發送到服務器(https))。
    JS中對於 Cookie 的操作
    (1)創建 Cookie
        document.cookie = "id=" + result.data['id'] + ";path=/";
        document.cookie = "name=" + result.data['name'] + ";path=/";
        document.cookie = "avatar=" + result.data['avatar'] + ";path=/";
    (2)讀取 Cookie
        var array = document.cookie.split(";");

注:爲防止惡意使用,每個域(站點)下的 Cookie 數量有限制
    1.IE6 一下最多20個 Cookie
    2.IE7 和之後可以有50個 Cookie
    3.FF 之後可以有50個 Cookie
    4.chrome 和 safari 沒有硬性限制 
    IE 和 opera 會清理近期最少使用的 Cookie , FF 會隨機清理 Cookie 
    Cookie 的最大大於爲4094字節,每個 domain 最多隻能有20條。

2.Session

服務器爲區別用戶分配形成的身份標識,運行於服務端,客戶端只有 Session id。

不會同 Cookie 一樣被獲取後能夠進行 Cookie 欺騙,因此比 Cookie 安全,離開網站後會被銷燬。但如果服務器做了負載均衡,那麼下一個操作請求到了另一臺服務器的時候 Session 會丟失。

因此建議將登陸信息等重要信息存放爲 Session ,其他信息如果需要保留,可以放在 Cookie 中。

3.Token

是用戶身份的驗證方式,最簡單的 Token 組成: uid(用戶唯一的身份標識)、 time(當前時間的時間戳)、 sign(簽名,由 Token 的前幾位+鹽以哈希算法壓縮成一定長的十六進制字符串,可以防止惡意第三方拼接Token請求服務器)。還可以把不變的參數也放進 Token,避免多次查庫。 Token 可以存放在數據庫也可以存放在內存中。

 

二 身份驗證

1.傳統身份驗證

客戶端通過用戶名密碼登陸後由服務器返回認證信息存儲至 Cookie 中。之後每一次的訪問都會帶上 Cookie 中的內容,而服務器會驗證一個這個 Cookie 裏的信息,看看能不能在服務端這裏找到對應的記錄,如果可以,說明用戶已經通過了身份驗證,就把用戶請求的數據返回給客戶端。 Session 認證只是簡單的把 User 信息存儲到 Session 裏,因爲SID 的不可預測性,暫且認爲是安全的。大部分 Session 機制都使用會話 Cookie 來保存 Session id,而關閉瀏覽器後這個 Session id 就消失了,再次連接服務器時也就無法找到原來的 Session (Session 在接收到關閉命令前始終運行在服務器,只是客戶端失去 Session id 後無法找到)。

2.基於 Token 的身份驗證

提供的是認證和授權,認證是針對用戶,授權是針對應用。目的是讓某應用有權利訪問某用戶的信息。
    (1)客戶端使用用戶名跟密碼請求登錄
    (2)服務器收到請求,去驗證用戶名與密碼,驗證成功後,簽發一個 Token 併發送給客戶端
    (3)客戶端收到 Token 以後可以把它存儲起來,比如放在 Cookie 裏或者 Local Storage 裏,以後每次向服務端請求資源的時候需要帶着服務端簽發的 Token
    (4)服務器收到請求,首先去驗證客戶端請求裏面帶着的 Token,如果驗證成功,就向客戶端返回請求的數據。驗證失敗則返回錯誤信息,讓他重新登錄。其中服務器上 Token 設置一個有效期,每次客戶端請求的時候都驗證 Token 和有效期。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章