1.簡單介紹
session(會(huì)話):
當(dāng)用戶打開某個(gè)web應(yīng)用時(shí)募书,便與web服務(wù)器產(chǎn)生一次session异雁。服務(wù)器為了區(qū)分當(dāng)前給自己發(fā)請(qǐng)求的是誰华临,給每個(gè)客戶端分配了一個(gè)不同的“身份標(biāo)識(shí)”窘行〖⒆罚客戶端發(fā)請(qǐng)求時(shí)需要攜帶該“身份標(biāo)識(shí)”」蘅“身份標(biāo)識(shí)”的存儲(chǔ)方式很多但绕,通常使用cookie。
服務(wù)器使用session把用戶的信息臨時(shí)保存在了服務(wù)器上,用戶離開網(wǎng)站后session會(huì)被銷毀捏顺×酰可是session有一個(gè)缺陷:如果web服務(wù)器做了負(fù)載均衡,那么下一個(gè)操作請(qǐng)求到了另一臺(tái)服務(wù)器的時(shí)候session會(huì)丟失幅骄。
cookie:
cookie是瀏覽器里面能永久存儲(chǔ)的一種數(shù)據(jù)狸臣。
cookie由服務(wù)器生成,發(fā)送給瀏覽器昌执,瀏覽器把cookie以key-value形式保存到某個(gè)目錄下的文本文件內(nèi),下一次請(qǐng)求同一網(wǎng)站時(shí)會(huì)把該cookie發(fā)送給服務(wù)器诈泼。由于cookie是存在客戶端上的懂拾,所以瀏覽器加入了一些限制確保cookie不會(huì)被惡意使用,同時(shí)不會(huì)占據(jù)太多磁盤空間铐达,所以每個(gè)域的cookie數(shù)量是有限的岖赋。
token(令牌):
token是用戶身份的驗(yàn)證方式,最簡單的token組成:uid(用戶唯一的身份標(biāo)識(shí))瓮孙、time(當(dāng)前時(shí)間的時(shí)間戳)唐断、sign(簽名,由token的前幾位+鹽以哈希算法壓縮成一定長的十六進(jìn)制字符串杭抠,可以防止惡意第三方拼接token請(qǐng)求服務(wù)器)脸甘。還可以把不變的參數(shù)也放進(jìn)token,避免多次查庫
2.傳統(tǒng)身份驗(yàn)證
HTTP是一種沒有狀態(tài)的協(xié)議偏灿,并不知道誰是訪問者丹诀。假設(shè)一個(gè)客戶端訪問服務(wù)端時(shí)發(fā)送賬號(hào)密碼,通過驗(yàn)證翁垂。下回它再次訪問時(shí)铆遭,還是需要驗(yàn)證。
解決辦法(session+cookie):
1)客戶端訪問時(shí)沿猜,通過了驗(yàn)證枚荣。
2)服務(wù)端生成一條記錄,記錄一些必要信息啼肩。
3)把記錄這些信息的ID號(hào)發(fā)送給客戶端
4)客戶端收到ID號(hào)后存儲(chǔ)在cookie中
5)下次客戶端重新訪問服務(wù)端時(shí)橄妆,帶上cookie信息
6)服務(wù)端驗(yàn)證cookie里面的信息,如果能找到對(duì)應(yīng)的記錄祈坠,則用戶通過了驗(yàn)證
3.token身份驗(yàn)證
1)客戶端使用賬號(hào)密碼請(qǐng)求登錄
2)服務(wù)端收到請(qǐng)求呼畸,驗(yàn)證賬號(hào)密碼
3)驗(yàn)證通過,服務(wù)端簽發(fā)一個(gè)token給客戶端
4)客戶端收到token存儲(chǔ)起來(例:存在cookie)
5)客戶端每次請(qǐng)求服務(wù)端時(shí)帶著服務(wù)端簽發(fā)的token
6)服務(wù)端收到請(qǐng)求颁虐,驗(yàn)證token蛮原。驗(yàn)證成功則返回?cái)?shù)據(jù)給客戶端
4.常見問題
1.服務(wù)器上的token存儲(chǔ)到數(shù)據(jù)庫中,每次查詢會(huì)不會(huì)很費(fèi)時(shí)另绩?
如果存儲(chǔ)到數(shù)據(jù)庫中會(huì)造成系統(tǒng)的性能問題儒陨,可以放在內(nèi)存中
2.客戶端得到的token需要如何處理花嘶?
i.在存儲(chǔ)的時(shí)候把token對(duì)稱加密
ii.將請(qǐng)求url、時(shí)間戳蹦漠、token三者合并加鹽簽名椭员,服務(wù)器驗(yàn)證有效性
作者:Mcyboy007
鏈接:http://www.reibang.com/p/5ac166c5fe76
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)笛园,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處隘击。