上文《3種web會話管理的方式》介紹了3種會話管理的方式,其中token-based的方式有必要從實(shí)現(xiàn)層面了解一下。本文主要介紹這方面的內(nèi)容。上文提到token-based的實(shí)現(xiàn)目前有一個開放的標(biāo)準(zhǔn)可用,這個標(biāo)準(zhǔn)就是JWT,從它的官網(wǎng)上也能看到,目前實(shí)現(xiàn)了JWT的技術(shù)非常多,基本上涵蓋了所有的語言平臺。本文選擇expressjsonwebtoken基于nodejs來實(shí)現(xiàn)token-based會話管理。

相關(guān)代碼:https://github.com/liuyunzhuge/blog/tree/master/node_jwt

demo的說明我會在本文第二部分介紹,下面先介紹一下JWT的相關(guān)知識。

認(rèn)識JWT

JSON Web Token(JWT)是一個開放標(biāo)準(zhǔn)(RFC 7519),它定義了一種緊湊和自包含的方式,用于在各方之間作為JSON對象安全地傳輸信息。作為標(biāo)準(zhǔn),它沒有提供技術(shù)實(shí)現(xiàn),但是大部分的語言平臺都有按照它規(guī)定的內(nèi)容提供了自己的技術(shù)實(shí)現(xiàn),所以實(shí)際在用的時候,只要根據(jù)自己當(dāng)前項(xiàng)目的技術(shù)平臺,到官網(wǎng)上選用合適的實(shí)現(xiàn)庫即可。

使用JWT來傳輸數(shù)據(jù),實(shí)際上傳輸?shù)氖且粋€字符串,這個字符串就是所謂的json web token字符串。所以廣義上,JWT是一個標(biāo)準(zhǔn)的名稱;狹義上,JWT指的就是用來傳遞的那個token字符串。這個串有兩個特點(diǎn): 
1)緊湊:指的是這個串很小,能通過url 參數(shù),http 請求提交的數(shù)據(jù)以及http header的方式來傳遞; 
2)自包含:這個串可以包含很多信息,比如用戶的id、角色等,別人拿到這個串,就能拿到這些關(guān)鍵的業(yè)務(wù)信息,從而避免再通過數(shù)據(jù)庫查詢等方式才能得到它們。

通常一個JWT是長這個樣子的(這個串本來是不會換行的,為了讓這個串看起來的樣子跟后面要介紹的數(shù)據(jù)結(jié)構(gòu)對應(yīng)起來才手工加的換行):

image 

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式