日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
干掉服務(wù)狀態(tài)!從Session到Token

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

成都創(chuàng)新互聯(lián)主要從事網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)江孜,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575

首先要知道 HTTP 請求是無狀態(tài)的;

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

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

01.Cookie

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

當(dāng)下一次請求的時(shí)候,會把 Cookie 發(fā)送給服務(wù)端,服務(wù)端對 Cookie 中的信息解析并驗(yàn)證身份。

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

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

02.Session

保存在服務(wù)端,可以用于記錄客戶狀態(tài);

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

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

03.Cookie 和 Session

關(guān)于 Cookie 和 Session 的區(qū)別,很多同學(xué)會回答:“Cookie 保存在客戶端,Session 保存在服務(wù)器端”,其實(shí)這樣的想法并不全面:

Cookie 是一個(gè)實(shí)際存在的的東西,一個(gè)很具體的東西,就是一段數(shù)據(jù),而 Session 是一個(gè)抽象概念,或者叫做模式方法,它有很多實(shí)現(xiàn)方案;

比如 Tomcat 的實(shí)現(xiàn)方法:把狀態(tài)保存在服務(wù)端,然后生成一個(gè) JSESSIONID 放在 Cookie 中;請求過來之后,拿著 JSESSIONID 在服務(wù)器端查詢并驗(yàn)證狀態(tài)。

04.Token

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

針對這個(gè)問題,我們可以進(jìn)行服務(wù)器之間的 Session 同步,或者干脆把 Session 保存到第三方的組件中,例如保存到 Redis 中;但是不管是哪種方案,都讓 Session 變成了項(xiàng)目的負(fù)擔(dān)。

這時(shí)候,服務(wù)端就會想,如果 Session 不保存在我這里多好,第一次發(fā)送用戶名密碼給我,驗(yàn)證通過后我給你一個(gè)通行證,以后客戶端每次請求的時(shí)候就帶著這個(gè)通行證;

這個(gè)通行證就是 token,當(dāng)然這個(gè)驗(yàn)證結(jié)果中需要包含客戶端信息,服務(wù)端需要知道請求是誰發(fā)過來的;還需要包含時(shí)間信息,因?yàn)橥ㄐ凶C不可能永遠(yuǎn)有效;通行證還不能是明文的,否則會有被截獲的風(fēng)險(xiǎn)。

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 單點(diǎn)登錄

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

06.Token 和 Session

對于 session 和 token ,對比它們沒有本質(zhì)的區(qū)別,兩者都是加密后的字符串,都可以做身份驗(yàn)證。當(dāng)然 token 比 session 還是有一定區(qū)別的,比如 token 跨域更容易,token 更好控制等等,另外在授權(quán)場景下,token 比 session 有著更大的優(yōu)勢;

比如,我開發(fā)一個(gè)網(wǎng)站,允許微信用戶登錄,使用 token 的流程大概是這樣的:

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

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


分享文章:干掉服務(wù)狀態(tài)!從Session到Token
鏈接地址:http://www.5511xx.com/article/cdhsscs.html