使用session綁定實(shí)現(xiàn)登錄驗(yàn)證功能 Token是什么?和session、cookie相比,使用場景有什么區(qū)別?
Token是什么?和session、cookie相比,使用場景有什么區(qū)別?在Web開發(fā)領(lǐng)域,也許大家是對(duì)Cookie和Session都很清楚,Cookie和Session大都會(huì)話保持技術(shù)的解決方案。隨
Token是什么?和session、cookie相比,使用場景有什么區(qū)別?
在Web開發(fā)領(lǐng)域,也許大家是對(duì)Cookie和Session都很清楚,Cookie和Session大都會(huì)話保持技術(shù)的解決方案。隨著技術(shù)的發(fā)展,Token機(jī)制再次出現(xiàn)在我們面前,當(dāng)然了很多開發(fā)者對(duì)此Token和Cookie、Session的區(qū)別及使用場景猜得出不清。
Cookie和Session的用途要很清楚我們ftp連接網(wǎng)站是通過HTTP協(xié)議或HTTPS協(xié)議來成功的,HTTP協(xié)議它本身是gogoing的協(xié)議(即:服務(wù)器難以猜得出哪些請(qǐng)求是來源于同個(gè)客戶)。而業(yè)務(wù)層面會(huì)比較復(fù)雜到客戶端與服務(wù)器端的交互(同網(wǎng)站下多個(gè)頁面間能鏈接共享數(shù)據(jù)),此時(shí)服務(wù)器端前提是要達(dá)到會(huì)話狀態(tài),這樣的才能通過用戶身份的鑒別。
因此HTTP無狀態(tài)的特性,如果要實(shí)話客戶端和服務(wù)器端的會(huì)話保持,那就是需要其它機(jī)制來實(shí)現(xiàn)程序,隨后Cookie和Session應(yīng)運(yùn)而出。
通常情況下,Session和Cookie是配起來在一起不使用的。
Token是什么上面說起的Session和Cookie機(jī)制來達(dá)到會(huì)話,會(huì)未知一個(gè)問題:客戶端瀏覽器如果能保存自己的SessionID去掉,而服務(wù)器卻要保存到所有用戶的Session信息,這對(duì)此服務(wù)器來說開銷較大,不過不利用服務(wù)器的擴(kuò)展(例如服務(wù)器集群時(shí),Session如何離線存儲(chǔ)是個(gè)問題)!
索性有人努力思考,如果不是把Session信息讓客戶端來交回來不過難以偽造不就也可以幫忙解決這個(gè)問題了?從而有了Token機(jī)制。
Token民間俗稱為“令牌”,它的構(gòu)成是:
uid:用戶任何身份標(biāo)識(shí)
timestamp:當(dāng)前時(shí)間戳
sign:簽名字符串,能夠防止第三方變?cè)鞌?shù)據(jù);簽名密鑰是存儲(chǔ)位置在服務(wù)器端的,其它人根本無法明白
其它疊加參數(shù)。
Token機(jī)制下的認(rèn)證流程Token機(jī)制其實(shí)和Cookie機(jī)制極為幾乎完全一樣,比較多有200元以內(nèi)流程:
1、用戶登錄接受身份認(rèn)證,認(rèn)證成功后服務(wù)器端生成氣體Token回給客戶端;
2、客戶端可以接收到Token后能保存在客戶端(可保存到在Cookie、LocalStorage、SessionStorage中);
3、客戶端立即只是請(qǐng)求服務(wù)器端時(shí),將Token以及各位頭盛有Headers中;
4、服務(wù)器端收不到跪請(qǐng)頭中的Token,將用戶參數(shù)通過重新制定規(guī)則再參與一次簽名,一次簽名若相同則如果說完成,反之?dāng)?shù)據(jù)修真者的存在篡改請(qǐng)求失敗。
(生成簽名示例圖)
(驗(yàn)證簽名示例圖)
Token與CookieSession的區(qū)別Cookie不過也雇傭的是令牌作用,但它是“有狀態(tài)”的;而Token令牌是無狀態(tài)的,更不利于分布式部署。
以上那是我的觀點(diǎn),對(duì)此這個(gè)問題大家是怎莫看待的呢?歡迎在下方評(píng)論區(qū)別人交流~我是科技領(lǐng)域創(chuàng)作者,十年互聯(lián)網(wǎng)從業(yè)經(jīng)驗(yàn),記得關(guān)注我了解更多科技知識(shí)!
用戶登錄Session?
寫一個(gè)基類PageBase繼承自需要身份驗(yàn)證的頁面能繼承PageBase代碼:{publicPageBase(){////TODO:在此處去添加構(gòu)造函數(shù)邏輯//}protectedoverridevoidOnLoad(EventArgse){(e)if(Session[