session 、cookie、token的區別(轉)

session
  session的中文翻譯是「會話」,當用戶打開某個web應用時,便與web服務器產生一次session。服務器使用session把用戶的信息臨時保存在了服務器上,用戶離開網站後session會被銷燬。這種用戶信息存儲方式相對cookie來講更安全,但是session有一個缺陷:若是web服務器作了負載均衡,那麼下一個操做請求到了另外一臺服務器的時候session會丟失。web

 

cookie
  cookie是保存在本地終端的數據。cookie由服務器生成,發送給瀏覽器,瀏覽器把cookie以kv形式保存到某個目錄下的文本文件內,下一次請求同一網站時會把該cookie發送給服務器。因爲cookie是存在客戶端上的,因此瀏覽器加入了一些限制確保cookie不會被惡意使用,同時不會佔據太多磁盤空間,因此每一個域的cookie數量是有限的。算法

     cookie的組成有:名稱(key)、值(value)、有效域(domain)、路徑(域的路徑,通常設置爲全局:"\")、失效時間、安全標誌(指定後,cookie只有在使用SSL鏈接時才發送到服務器(https))。下面是一個簡單的js使用cookie的例子:後端

用戶登陸時產生cookie:api

document.cookie = "id="+result.data['id']+"; path=/";瀏覽器

document.cookie = "name="+result.data['name']+"; path=/";安全

document.cookie = "avatar="+result.data['avatar']+"; path=/";服務器

使用到cookie時作以下解析:restful

var cookie = document.cookie;var cookieArr = cookie.split(";");var user_info = {};for(var i = 0; i < cookieArr.length; i++) {cookie

    user_info[cookieArr[i].split("=")[0]] = cookieArr[i].split("=")[1];session

}

$('#user_name').text(user_info[' name']);

$('#user_avatar').attr("src", user_info[' avatar']);

$('#user_id').val(user_info[' id']);

 

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

 cookie 和session的區別
一、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。

二、cookie不是很安全,別人能夠分析存放在本地的COOKIE並進行COOKIE欺騙
   考慮到安全應當使用session。

三、session會在必定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能
   考慮到減輕服務器性能方面,應當使用COOKIE。

四、單個cookie保存的數據不能超過4K,不少瀏覽器都限制一個站點最多保存20個cookie。

五、因此我的建議:
   將登錄信息等重要信息存放爲SESSION
   其餘信息若是須要保留,能夠放在COOKIE中

token 和session 的區別
    session 和 oauth token並不矛盾,做爲身份認證 token安全性比session好,由於每一個請求都有簽名還能防止監聽以及重放攻擊,而session就必須靠鏈路層來保障通信安全了。如上所說,若是你須要實現有狀態的會話,仍然能夠增長session來在服務器端保存一些狀態

    App一般用restful api跟server打交道。Rest是stateless的,也就是app不須要像browser那樣用cookie來保存session,所以用session token來標示本身就夠了,session/state由api server的邏輯處理。 若是你的後端不是stateless的rest api, 那麼你可能須要在app裏保存session.能夠在app裏嵌入webkit,用一個隱藏的browser來管理cookie session.

 

   Session 是一種HTTP存儲機制,目的是爲無狀態的HTTP提供的持久機制。所謂Session 認證只是簡單的把User 信息存儲到Session 裏,由於SID 的不可預測性,暫且認爲是安全的。這是一種認證手段。 而Token ,若是指的是OAuth Token 或相似的機制的話,提供的是 認證 和 受權 ,認證是針對用戶,受權是針對App 。其目的是讓 某App有權利訪問 某用戶 的信息。這裏的 Token是惟一的。不能夠轉移到其它 App上,也不能夠轉到其它 用戶 上。 轉過來講Session 。Session只提供一種簡單的認證,即有此 SID,即認爲有此 User的所有權利。是須要嚴格保密的,這個數據應該只保存在站方,不該該共享給其它網站或者第三方App。 因此簡單來講,若是你的用戶數據可能須要和第三方共享,或者容許第三方調用 API 接口,用 Token 。若是永遠只是本身的網站,本身的 App,用什麼就無所謂了。

  token就是令牌,好比你受權(登陸)一個程序時,他就是個依據,判斷你是否已經受權該軟件;cookie就是寫在客戶端的一個txt文件,裏面包括你登陸信息之類的,這樣你下次在登陸某個網站,就會自動調用cookie自動登陸用戶名;session和cookie差很少,只是session是寫在服務器端的文件,也須要在客戶端寫入cookie文件,可是文件裏是你的瀏覽器編號.Session的狀態是存儲在服務器端,客戶端只有session id;而Token的狀態是存儲在客戶端。

相關文章
相關標籤/搜索