日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

面試必問(wèn):session,cookie與session區(qū)別( 三 )


基于Token 的身份驗(yàn)證例如, 張三已經(jīng)登錄了系統(tǒng),服務(wù)端給他發(fā)一個(gè)令牌(Token), 里邊包含了張三的 user id, 后續(xù)張三再次通過(guò) Http 請(qǐng)求訪問(wèn)服務(wù)器的時(shí)候, 把這個(gè) Token 通過(guò) Http header 帶過(guò)來(lái)不就可以了 。服務(wù)端只需要驗(yàn)證 Token是自己生成的,而非偽造的 。
假如不驗(yàn)證任何人都可以偽造,那么這個(gè)令牌(token)和 session id沒(méi)有本質(zhì)區(qū)別,如何讓別人偽造不了?那就對(duì)數(shù)據(jù)做一個(gè)簽名(Sign)吧, 比如說(shuō)服務(wù)端用 HMAC-SHA256 加密算法,再加上一個(gè)只有服務(wù)端才知道的密鑰, 對(duì)數(shù)據(jù)做一個(gè)簽名, 把這個(gè)簽名和數(shù)據(jù)一起作為 Token 發(fā)給客戶端, 客戶端收到 Token 以后可以把它存儲(chǔ)起來(lái),比如存儲(chǔ)在 Cookie(存儲(chǔ)在瀏覽器目錄中的文本文件)中,由于密鑰除了服務(wù)端任何其他用戶都不知道, 就無(wú)法偽造令牌(Token) 。
【面試必問(wèn):session,cookie與session區(qū)別】這樣一來(lái),服務(wù)端就可以不保存 Token 了, 當(dāng)張三把這個(gè)Token發(fā)給服務(wù)端時(shí),服務(wù)端使用相同的HMAC-SHA256 算法和密鑰,對(duì)數(shù)據(jù)再計(jì)算一次簽名, 與 Token 中的簽名做個(gè)比較, 如果兩者相同,說(shuō)明張三已經(jīng)登錄過(guò)了, 即驗(yàn)證成功 。若不相同, 那么說(shuō)明這個(gè)請(qǐng)求是偽造的 。這樣一來(lái), 服務(wù)端只需要生成 Token,而不需要保存Token, 只是驗(yàn)證Token就好了 ,也就實(shí)現(xiàn)了時(shí)間換取空間(CPU計(jì)算時(shí)間換取Session 存儲(chǔ)空間) 。
Token是什么?和session、cookie相比,使用場(chǎng)景有什么區(qū)別?
在Web開(kāi)發(fā)領(lǐng)域,相信大家對(duì)于Cookie和Session都很熟悉,Cookie和Session都是會(huì)話保持技術(shù)的解決方案 。隨著技術(shù)的發(fā)展,Token機(jī)制出現(xiàn)在我們面前,不過(guò)很多開(kāi)發(fā)者對(duì)于Token和Cookie、Session的區(qū)別及使用場(chǎng)景分辨不清 。Cookie和Session的用途要知道我們?cè)L問(wèn)網(wǎng)站都是通過(guò)HTTP協(xié)議或HTTPS協(xié)議來(lái)完成的,HTTP協(xié)議它本身是無(wú)狀態(tài)的協(xié)議(即:服務(wù)器無(wú)法分辨哪些請(qǐng)求是來(lái)源于同個(gè)客戶) 。
而業(yè)務(wù)層面會(huì)涉及到客戶端與服務(wù)器端的交互(同網(wǎng)站下多個(gè)頁(yè)面間能共享數(shù)據(jù)),此時(shí)服務(wù)器端必須要保持會(huì)話狀態(tài),這樣才能進(jìn)行用戶身份的鑒別 。由于HTTP無(wú)狀態(tài)的特性,如果要實(shí)話客戶端和服務(wù)器端的會(huì)話保持,那就需要其它機(jī)制來(lái)實(shí)現(xiàn),于是Cookie和Session應(yīng)運(yùn)而生 。通常情況下,Session和Cookie是搭配在一起使用的 。
Token是什么上面說(shuō)到的Session和Cookie機(jī)制來(lái)保持會(huì)話,會(huì)存在一個(gè)問(wèn)題:客戶端瀏覽器只要保存自己的SessionID即可,而服務(wù)器卻要保存所有用戶的Session信息,這對(duì)于服務(wù)器來(lái)說(shuō)開(kāi)銷較大,而且不利用服務(wù)器的擴(kuò)展(比如服務(wù)器集群時(shí),Session如何同步存儲(chǔ)就是個(gè)問(wèn)題)!于是有人思考,如果把Session信息讓客戶端來(lái)保管而且無(wú)法偽造不就可以解決這個(gè)問(wèn)題了?進(jìn)而有了Token機(jī)制 。
Token俗稱為“令牌”,它的構(gòu)成是:uid:用戶唯一身份標(biāo)識(shí)timestamp:當(dāng)前時(shí)間戳sign:簽名字符串,防止第三方偽造數(shù)據(jù);簽名密鑰是存儲(chǔ)在服務(wù)器端的,其它人無(wú)法知道其它附加參數(shù) 。Token機(jī)制下的認(rèn)證流程Token機(jī)制其實(shí)和Cookie機(jī)制極其相似,主要有以下流程:1、用戶登錄進(jìn)行身份認(rèn)證,認(rèn)證成功后服務(wù)器端生成Token返回給客戶端;2、客戶端接收到Token后保存在客戶端(可保存在Cookie、LocalStorage、SessionStorage中);3、客戶端再次請(qǐng)求服務(wù)器端時(shí),將Token作為請(qǐng)求頭放入Headers中;4、服務(wù)器端接收請(qǐng)求頭中的Token,將用戶參數(shù)按照既定規(guī)則再進(jìn)行一次簽名,兩次簽名若一致則認(rèn)為成功,反之?dāng)?shù)據(jù)存在篡改請(qǐng)求失敗 。
(生成簽名示例圖)(驗(yàn)證簽名示例圖)Token與Cookie Session的區(qū)別Cookie其實(shí)也充當(dāng)?shù)氖橇钆谱饔?,但它是“有狀態(tài)”的;而Token令牌是無(wú)狀態(tài)的,更利于分布式部署 。以上就是我的觀點(diǎn),對(duì)于這個(gè)問(wèn)題大家是怎么看待的呢?歡迎在下方評(píng)論區(qū)交流 ~ 我是科技領(lǐng)域創(chuàng)作者,十年互聯(lián)網(wǎng)從業(yè)經(jīng)驗(yàn),歡迎關(guān)注我了解更多科技知識(shí)!。

推薦閱讀