成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

干掉服務狀態!從 Session 到 Token

開發 前端
在講Token之前,先簡單說說什么是 Session 和 Cookie。首先要知道 HTTP 請求是無狀態的,無狀態的意思就是:每一次請求都是獨立的;每一次請求不會受到前面請求的影響,也不會影響后面的請求。

[[313202]]

在講Token之前,先簡單說說什么是 Session 和 Cookie。

首先要知道 HTTP 請求是無狀態的;

無狀態的意思就是:每一次請求都是獨立的;每一次請求不會受到前面請求的影響,也不會影響后面的請求;

比如我們登錄一個系統的時候,驗證用戶名密碼之后,打開系統各個頁面的時候就不需要再進行登錄操作了,直到我們主動退出登錄或超時退出登錄;為了讓服務器有“記憶功能”,我們可以用到 Session、Cookie。

01.Cookie

是在客戶端(瀏覽器)保存用戶信息的一種機制;Cookie 由服務器生成,發送給瀏覽器,然后瀏覽器把 Cookie 以鍵值對的形式保存在客戶端的某個目錄下面;每種瀏覽器存儲大小會有一些差異,一般不超過 4KB;

當下一次請求的時候,會把 Cookie 發送給服務端,服務端對 Cookie 中的信息解析并驗證身份。

比如你入職一個公司,會給你辦一張工卡,上面有你的姓名、工號、部門等信息,你進入職場的時候,拿著工卡就可以進出。

但是 Cookie 是不可以跨域名使用的;就好像我拿著我們公司的工卡,去你們公司,保安肯定是不會放我進去的。

02.Session

保存在服務端,可以用于記錄客戶狀態;

比如我們經常會用 Session 保存客戶的基本信息、權限信息等;用戶第一次登錄之后,服務器就會創建一個 Session ,并將 SessionID 返回給瀏覽器,瀏覽器通常將其寫入到 Cookie 中,這種 Cookie 也叫做 SessionCookie ,瀏覽器再次訪問時,只需要拿著 SessionID 從服務端查找 Session 就可以了。

另外,這個 SessionID 不一定非要保存到 Cookie 中,只是對于瀏覽器客戶端,大家的默認做法是放在 Cookie 中。

03.Cookie 和 Session

關于 Cookie 和 Session 的區別,很多同學會回答:“Cookie 保存在客戶端,Session 保存在服務器端”,其實這樣的想法并不全面:

Cookie 是一個實際存在的的東西,一個很具體的東西,就是一段數據,而 Session 是一個抽象概念,或者叫做模式方法,它有很多實現方案;

比如 Tomcat 的實現方法:把狀態保存在服務端,然后生成一個 JSESSIONID 放在 Cookie 中;請求過來之后,拿著 JSESSIONID 在服務器端查詢并驗證狀態。

 

04.Token

當然,隨著用戶量的增加,保存在服務端的 Session 也不斷增加,這給服務端帶來了很大的壓力,并且如果程序是集群或分布式方式部署,同一個用戶第一次請求,訪問到了 A 服務器,創建了 Session,但是第二次請求卻發到了 B 服務器上,但是 B 服務器上并沒有之前創建的 Session;這就是分布式架構中的 Session 共享問題。

針對這個問題,我們可以進行服務器之間的 Session 同步,或者干脆把 Session 保存到第三方的組件中,例如保存到 Redis 中;但是不管是哪種方案,都讓 Session 變成了項目的負擔。

這時候,服務端就會想,如果 Session 不保存在我這里多好,第一次發送用戶名密碼給我,驗證通過后我給你一個通行證,以后客戶端每次請求的時候就帶著這個通行證;

這個通行證就是 token,當然這個驗證結果中需要包含客戶端信息,服務端需要知道請求是誰發過來的;還需要包含時間信息,因為通行證不可能永遠有效;通行證還不能是明文的,否則會有被截獲的風險。

HMAC-SHA1:

  1. token = user_id|expiry_date|HMAC(user_id|expiry_date, k) 

AES:

  1. token = AES(user_id|expiry_date, x) 

RSA:

  1. token = RSA(user_id|expiry_date, private key

 

05.SSO 單點登錄

有些公司會建設統一登錄系統(單點登錄),客戶端先去這個系統獲取 Token ,驗證通過再拿著這些Token去訪問其他系統;API Gateway 也可以提供類似的功能,我們公司就是這樣,客戶端接入的時候,先向網關獲取 Token,驗證通過了才能訪問被授權的接口,并且一段時間后要重新或者 Token。

 

06.Token 和 Session

對于 session 和 token ,對比它們沒有本質的區別,兩者都是加密后的字符串,都可以做身份驗證。當然 token 比 session 還是有一定區別的,比如 token 跨域更容易,token 更好控制等等,另外在授權場景下,token 比 session 有著更大的優勢;

比如,我開發一個網站,允許微信用戶登錄,使用 token 的流程大概是這樣的:

  • 登錄網站時,跳轉到微信登錄頁面;
  • 用戶輸入用戶名密碼登錄微信后,給我們一個 token;
  • 用戶拿著 token 就可以在我們的網站使用,而我們網站并不需要知道你微信的用戶名和密碼。
  • 總之,如果在同一個網站內,token 和 session 并沒有太大的區別,如果跨站使用,token 會更方便一些。

Cookie、Session 和 Token 就介紹這么多,如果有問題,大家可以加我微信或進微信群,咱們一起討論。

責任編輯:武曉燕 來源: 會點代碼的大叔
相關推薦

2017-03-20 08:41:00

2020-01-19 10:07:25

SessionTokenCookie

2019-11-07 10:37:36

CookieSessionToken

2019-06-11 14:45:25

2017-07-05 15:09:52

密碼token瀏覽器

2023-12-11 11:29:35

2023-12-27 08:16:54

Sessiontoken安全性

2015-11-26 10:20:17

F5應用交付

2011-03-24 10:59:10

Nagios監控mysql

2021-09-05 18:26:42

2021-08-09 08:53:30

HTTP狀態化協議

2021-05-19 09:37:45

SessionTokencookie

2014-10-16 14:13:56

華為

2019-10-11 11:20:28

物聯網技術機器學習

2021-03-23 10:45:23

CookieSession前端

2021-08-02 12:50:45

sessiontokenJava

2023-12-04 10:36:46

SessionCookie

2016-08-25 21:12:31

微服務架構發布

2013-07-16 09:06:27

SDN案例視頻

2011-11-17 11:24:37

CA World 20CA Technolo
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 偷拍自拍第一页 | 日韩中文字幕免费在线 | 亚洲va欧美va天堂v国产综合 | 99综合| 久久久精 | 91免费观看视频 | 久久一热| 天天草天天射 | 亚洲 中文 欧美 日韩 在线观看 | 激情视频中文字幕 | 亚洲欧美日韩精品久久亚洲区 | 日日夜夜91 | 日韩欧美视频在线 | 在线午夜| 蜜桃免费一区二区三区 | 免费观看一级特黄欧美大片 | 欧美日韩不卡 | 久久综合影院 | 成人免费在线观看视频 | 久久久久久免费毛片精品 | 午夜精品一区二区三区免费视频 | 91精品国产91久久综合桃花 | www.四虎.com| 99久久精品免费看国产小宝寻花 | 日本精品视频在线 | 中文字幕av在线一二三区 | 午夜色播 | 美女网站视频免费黄 | 欧美一级在线 | 亚洲综合小视频 | 高清免费av| 一级在线毛片 | 99久久久久久久久 | 国产精品久久福利 | 中文字幕亚洲精品 | 亚洲精品久久久久久久久久久久久 | 国产免费视频在线 | 日韩一区二区久久 | 国产精品日韩一区二区 | 精品福利一区二区三区 | 九九热在线视频 |