1. 程式人生 > >cookie、session、token的區別

cookie、session、token的區別

一.  cookie

 

1.什麼是cookie?

Cookie 技術產生源於 HTTP 協議在網際網路上的急速發展。隨著網際網路時代的策馬奔騰,頻寬等限制不存在了,人們需要更復雜的網際網路互動活動,就必須同伺服器保持活動狀態(簡稱:保活)。

Cookie 是在 HTTP 協議下,伺服器或指令碼可以維護客戶工作站上資訊的一種方式。Cookie 是由 Web 伺服器儲存在使用者瀏覽器(客戶端)上的小文字檔案,它可以包含有關使用者的資訊。無論何時使用者連結到伺服器,Web 站點都可以訪問 Cookie 資訊.

2.Cookie時效性

Cookie的預設時效為Session,也就是說瀏覽器關閉,Cookie會和session一起失效,但是Cookie的有效時間是可以設定的。

Cookie有一個屬性expires,設定其值為一個時間,那麼當到達此時間後,此cookie失效。


//建立cookie例項。 
HttpCookie cookie = new HttpCookie("id","666"); 
//設定cookie的過期時間,一小時後過期,自動清除檔案 
cookie.Expires = DateTime.Now.AddMonths(60);
//將建立的cookie檔案輸入到瀏覽器端 
Response.Cookies.Add(cookie);
//讀取cookie檔案中儲存的值 
Response.Write(Request.Cookies["id"].Value);
//cookie的銷燬,給他設定一個時間,他就被銷燬了
cookie.Expires = DateTime.Now.AddMonths(-60); 

 

3.執行流程:

1)、首先,客戶端會發送一個http請求到伺服器端。

2)、伺服器端接受客戶端請求後,傳送一個http響應到客戶端,這個響應頭,其中就包含Set-Cookie頭部,瀏覽器儲存Cookie。

3)、瀏覽器第二次訪問,將儲存的cookie發給後臺,後臺識別並更新cookie,返回瀏覽器再次儲存。

    二.session  
1、session是儲存在伺服器端,理論上是沒有是沒有限制,只要你的記憶體夠大   2、瀏覽器第一次訪問伺服器時會建立一個session物件並返回一個JSESSIONID=ID的值,
   建立一個Cookie物件key為JSSIONID,value為ID的值,將這個Cookie寫回瀏覽器   3、瀏覽器在第二次訪問伺服器的時候攜帶Cookie資訊JSESSIONID=ID的值,如果該JSESSIONID的session已經銷燬,
   那麼會重新建立一個新的session再返回一個新的JSESSIONID通過Cookie返回到瀏覽器   4、針對一個web專案,一個瀏覽器是共享一個session,就算有兩個web專案部署在同一個伺服器上,針對兩個專案的session是不同的
   如:你在tomcat上同時部署了兩個web專案,分別是web1、web2。當你在一個瀏覽器上同時訪問web1時建立的session是A1,訪問web2時建立的session是A2。
       後面你再多次訪問web1使用的session還是A1,多次訪問web2時使用session就是A2   5、session是基於Cookie技術實現,重啟瀏覽器後再次訪問原有的連線依然會建立一個新的session,
   因為Cookie在關閉瀏覽器後就會消失,但是原來伺服器的Session還在,只有等到了銷燬的時間會自動銷燬   6、如果瀏覽器端禁用了Cookie,那麼每次訪問都會建立一個新的Session,但是我們可以通過伺服器端程式重寫URL即可,如果頁面多連線多,會增加不必要的工作量,
   那可以強制讓你使用者開啟接收Cookie後再讓其訪問即可。       三.Token     1.token的基本概念

(1)Token的引入:Token是在客戶端頻繁向服務端請求資料,服務端頻繁的去資料庫查詢使用者名稱和密碼並進行對比,判斷使用者名稱和密碼正確與否,並作出相應提示,在這樣的背景下,Token便應運而生。

(2)Token的定義:Token是服務端生成的一串字串,以作客戶端進行請求的一個令牌,當第一次登入後,伺服器生成一個Token便將此Token返回給客戶端,以後客戶端只需帶上這個Token前來請求資料即可,無需再次帶上使用者名稱和密碼。

(3)使用Token的目的:Token的目的是為了減輕伺服器的壓力,減少頻繁的查詢資料庫,使伺服器更加健壯。


2. token的工作原理:

  1.使用者通過使用者名稱和密碼向服務端傳送請求

  2.服務端通過驗證,生成一個token傳送給客戶端

  3.客戶端儲存token,傳送請求時帶上token

  4.伺服器通過驗證,返回資料

 

3.token的優勢

  1.無狀態、可擴充套件

  2.支援移動裝置

  3.跨程式呼叫

  4.安全

 

四.Cookie和Session的區別:

1、cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上。

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

3、session會在一定時間內儲存在伺服器上。當訪問增多,會比較佔用你伺服器的效能,考慮到減輕伺服器效能方面,應當使用cookie。

4、單個cookie儲存的資料不能超過4K,很多瀏覽器都限制一個站點最多儲存20個cookie。

5、所以個人建議:將登陸資訊等重要資訊存放為session;其他資訊如果需要保留,可以放在cookie中


五.Token 和 Session 的區別:

  1.session和 token並不矛盾,作為身份認證token安全性比session好,因為每個請求都有簽名還能防止監聽以及重放攻擊,而session就必須靠鏈路層來保障通訊安全了。

  2.Session是一種HTTP儲存機制,目的是為無狀態的HTTP提供的持久機制。所謂Session認證只是簡單的把User資訊儲存到Session裡,因為SID的不可預測性,暫且認為是安全的。這是一種認證手段。

  3.Token,如果指的是OAuth Token或類似的機制的話,提供的是 認證 和 授權 ,認證是針對使用者,授權是針對App。其目的是讓 某App有權利訪問 某使用者 的資訊。這裡的Token是唯一的。不可以轉移到其它App上,也不可以轉到其它 使用者 上。

  4.token就是令牌,比如你授權(登入)一個程式時,他就是個依據,判斷你是否已經授權該軟體;cookie就是寫在客戶端的一個txt檔案,裡面包括你登入資訊之類的,這樣你下次在登入某個網站,就會自動呼叫cookie自動登入使用者名稱。

  5.session和cookie差不多,只是session是寫在伺服器端的檔案,也需要在客戶端寫入cookie檔案,但是檔案裡是你的瀏覽器編號.Session的狀態是儲存在伺服器端,客戶端只有session id;而Token的狀態是儲存在客戶端。