'BATJ都會用到的接口鑑權cookie、session 和token'

瀏覽器 Java 檸檬班軟件測試 2019-08-24
"

BATJ都會用到的接口鑑權cookie、session 和token

一、鑑權

鑑權是指驗證用戶是否擁有訪問系統的權利—鑑定權限。

二、cookie、session和token

為什麼會有cookie、session和token?

1、 http是無狀態協議

什麼是無狀態呢?

答:當前請求和上一次或者下一次請求是沒有任何關係的,好處是速度快,壞處是無法共享信息。

2、 互聯網的興起

以前的網站,基本用來查看些文件或者圖片,作為服務器不需要記錄誰來放訪問了什麼文件,每次來一個新的HTTP請求, 給予響應即可。

但隨著互聯網的飛速發展, http無狀態的缺點被放大。

各種各樣的交互網站,必須登錄後才能進行一些操作,比如發帖需要記錄發帖人、瀏覽記錄等,不同賬號訪問的信息必須獨立存儲。

3、 cookie、session的加入

我們不能修改HTTP協議(無狀態),那麼要解決共享信息的問題必須用其他的手段。

於是就有了會話ID(session id),服務器為每個用戶生成一個不一樣的隨機字符串(session id),一份存在服務器,一份以cookie的形式寫給瀏覽器。

瀏覽器每次向服務器發起HTTP請求時,攜帶這個字符串(session id)回傳給服務器,這樣就能區分誰是誰了。

4、 session有啥缺點呢?

雖然session解決了共享信息的問題,但同時對服務器帶來了其他問題—資源開銷(內存、cpu)。

對於瀏覽器來說sessionid是非常好用的,只需要在cookie中存一個字符串就行了,但是服務器必須存儲所有在線的用戶sessionid,那麼同時在線的人數越多開銷越大,嚴重影響了服務器的性能。

這時可以選擇去擴展服務器做集群,但同時也出現分佈式sessionid問題,那麼可以採用session粘滯或者session集中式管理(redis)來解決。

5、 擺脫session,擁抱token

上述的解決方案都是圍繞session,那麼能不能不用sessionid來解決呢?

如果不適用sessionid,如何確保數據是服務器生成的呢?怎麼去驗證呢?用戶信息存在哪?

於是有人想到了自己按照一定規則生成加密字符串,服務器只驗證不存儲,只要驗證通過說明是自己生成的,用戶信息存儲在加密字符串中,這樣性能、CORS(跨域資源共享)都能解決,而這個加密字符串就是token。

cookie、session的區別

"

BATJ都會用到的接口鑑權cookie、session 和token

一、鑑權

鑑權是指驗證用戶是否擁有訪問系統的權利—鑑定權限。

二、cookie、session和token

為什麼會有cookie、session和token?

1、 http是無狀態協議

什麼是無狀態呢?

答:當前請求和上一次或者下一次請求是沒有任何關係的,好處是速度快,壞處是無法共享信息。

2、 互聯網的興起

以前的網站,基本用來查看些文件或者圖片,作為服務器不需要記錄誰來放訪問了什麼文件,每次來一個新的HTTP請求, 給予響應即可。

但隨著互聯網的飛速發展, http無狀態的缺點被放大。

各種各樣的交互網站,必須登錄後才能進行一些操作,比如發帖需要記錄發帖人、瀏覽記錄等,不同賬號訪問的信息必須獨立存儲。

3、 cookie、session的加入

我們不能修改HTTP協議(無狀態),那麼要解決共享信息的問題必須用其他的手段。

於是就有了會話ID(session id),服務器為每個用戶生成一個不一樣的隨機字符串(session id),一份存在服務器,一份以cookie的形式寫給瀏覽器。

瀏覽器每次向服務器發起HTTP請求時,攜帶這個字符串(session id)回傳給服務器,這樣就能區分誰是誰了。

4、 session有啥缺點呢?

雖然session解決了共享信息的問題,但同時對服務器帶來了其他問題—資源開銷(內存、cpu)。

對於瀏覽器來說sessionid是非常好用的,只需要在cookie中存一個字符串就行了,但是服務器必須存儲所有在線的用戶sessionid,那麼同時在線的人數越多開銷越大,嚴重影響了服務器的性能。

這時可以選擇去擴展服務器做集群,但同時也出現分佈式sessionid問題,那麼可以採用session粘滯或者session集中式管理(redis)來解決。

5、 擺脫session,擁抱token

上述的解決方案都是圍繞session,那麼能不能不用sessionid來解決呢?

如果不適用sessionid,如何確保數據是服務器生成的呢?怎麼去驗證呢?用戶信息存在哪?

於是有人想到了自己按照一定規則生成加密字符串,服務器只驗證不存儲,只要驗證通過說明是自己生成的,用戶信息存儲在加密字符串中,這樣性能、CORS(跨域資源共享)都能解決,而這個加密字符串就是token。

cookie、session的區別

BATJ都會用到的接口鑑權cookie、session 和token

cookie:客戶端和服務端都能創建cookie,都是存放在客戶端。存放一些小而不敏感的數據,並且數據類型只能是字符串(json)。

session:服務端生成session,存放在服務端。可以存放任意數據,java中session中可以存放任意對象。

session必須依賴cookie實現。

三、session和token的區別

session:服務器生成、存儲、驗證,以cookie的方式傳給客戶端,客戶端以同樣方式發送給服務端。

session有狀態。

"

BATJ都會用到的接口鑑權cookie、session 和token

一、鑑權

鑑權是指驗證用戶是否擁有訪問系統的權利—鑑定權限。

二、cookie、session和token

為什麼會有cookie、session和token?

1、 http是無狀態協議

什麼是無狀態呢?

答:當前請求和上一次或者下一次請求是沒有任何關係的,好處是速度快,壞處是無法共享信息。

2、 互聯網的興起

以前的網站,基本用來查看些文件或者圖片,作為服務器不需要記錄誰來放訪問了什麼文件,每次來一個新的HTTP請求, 給予響應即可。

但隨著互聯網的飛速發展, http無狀態的缺點被放大。

各種各樣的交互網站,必須登錄後才能進行一些操作,比如發帖需要記錄發帖人、瀏覽記錄等,不同賬號訪問的信息必須獨立存儲。

3、 cookie、session的加入

我們不能修改HTTP協議(無狀態),那麼要解決共享信息的問題必須用其他的手段。

於是就有了會話ID(session id),服務器為每個用戶生成一個不一樣的隨機字符串(session id),一份存在服務器,一份以cookie的形式寫給瀏覽器。

瀏覽器每次向服務器發起HTTP請求時,攜帶這個字符串(session id)回傳給服務器,這樣就能區分誰是誰了。

4、 session有啥缺點呢?

雖然session解決了共享信息的問題,但同時對服務器帶來了其他問題—資源開銷(內存、cpu)。

對於瀏覽器來說sessionid是非常好用的,只需要在cookie中存一個字符串就行了,但是服務器必須存儲所有在線的用戶sessionid,那麼同時在線的人數越多開銷越大,嚴重影響了服務器的性能。

這時可以選擇去擴展服務器做集群,但同時也出現分佈式sessionid問題,那麼可以採用session粘滯或者session集中式管理(redis)來解決。

5、 擺脫session,擁抱token

上述的解決方案都是圍繞session,那麼能不能不用sessionid來解決呢?

如果不適用sessionid,如何確保數據是服務器生成的呢?怎麼去驗證呢?用戶信息存在哪?

於是有人想到了自己按照一定規則生成加密字符串,服務器只驗證不存儲,只要驗證通過說明是自己生成的,用戶信息存儲在加密字符串中,這樣性能、CORS(跨域資源共享)都能解決,而這個加密字符串就是token。

cookie、session的區別

BATJ都會用到的接口鑑權cookie、session 和token

cookie:客戶端和服務端都能創建cookie,都是存放在客戶端。存放一些小而不敏感的數據,並且數據類型只能是字符串(json)。

session:服務端生成session,存放在服務端。可以存放任意數據,java中session中可以存放任意對象。

session必須依賴cookie實現。

三、session和token的區別

session:服務器生成、存儲、驗證,以cookie的方式傳給客戶端,客戶端以同樣方式發送給服務端。

session有狀態。

BATJ都會用到的接口鑑權cookie、session 和token

token:服務器生成、驗證,以cookie或者請求頭的方式傳給客戶端,客戶端以同樣方式發送給服務端。

token無狀態。

"

BATJ都會用到的接口鑑權cookie、session 和token

一、鑑權

鑑權是指驗證用戶是否擁有訪問系統的權利—鑑定權限。

二、cookie、session和token

為什麼會有cookie、session和token?

1、 http是無狀態協議

什麼是無狀態呢?

答:當前請求和上一次或者下一次請求是沒有任何關係的,好處是速度快,壞處是無法共享信息。

2、 互聯網的興起

以前的網站,基本用來查看些文件或者圖片,作為服務器不需要記錄誰來放訪問了什麼文件,每次來一個新的HTTP請求, 給予響應即可。

但隨著互聯網的飛速發展, http無狀態的缺點被放大。

各種各樣的交互網站,必須登錄後才能進行一些操作,比如發帖需要記錄發帖人、瀏覽記錄等,不同賬號訪問的信息必須獨立存儲。

3、 cookie、session的加入

我們不能修改HTTP協議(無狀態),那麼要解決共享信息的問題必須用其他的手段。

於是就有了會話ID(session id),服務器為每個用戶生成一個不一樣的隨機字符串(session id),一份存在服務器,一份以cookie的形式寫給瀏覽器。

瀏覽器每次向服務器發起HTTP請求時,攜帶這個字符串(session id)回傳給服務器,這樣就能區分誰是誰了。

4、 session有啥缺點呢?

雖然session解決了共享信息的問題,但同時對服務器帶來了其他問題—資源開銷(內存、cpu)。

對於瀏覽器來說sessionid是非常好用的,只需要在cookie中存一個字符串就行了,但是服務器必須存儲所有在線的用戶sessionid,那麼同時在線的人數越多開銷越大,嚴重影響了服務器的性能。

這時可以選擇去擴展服務器做集群,但同時也出現分佈式sessionid問題,那麼可以採用session粘滯或者session集中式管理(redis)來解決。

5、 擺脫session,擁抱token

上述的解決方案都是圍繞session,那麼能不能不用sessionid來解決呢?

如果不適用sessionid,如何確保數據是服務器生成的呢?怎麼去驗證呢?用戶信息存在哪?

於是有人想到了自己按照一定規則生成加密字符串,服務器只驗證不存儲,只要驗證通過說明是自己生成的,用戶信息存儲在加密字符串中,這樣性能、CORS(跨域資源共享)都能解決,而這個加密字符串就是token。

cookie、session的區別

BATJ都會用到的接口鑑權cookie、session 和token

cookie:客戶端和服務端都能創建cookie,都是存放在客戶端。存放一些小而不敏感的數據,並且數據類型只能是字符串(json)。

session:服務端生成session,存放在服務端。可以存放任意數據,java中session中可以存放任意對象。

session必須依賴cookie實現。

三、session和token的區別

session:服務器生成、存儲、驗證,以cookie的方式傳給客戶端,客戶端以同樣方式發送給服務端。

session有狀態。

BATJ都會用到的接口鑑權cookie、session 和token

token:服務器生成、驗證,以cookie或者請求頭的方式傳給客戶端,客戶端以同樣方式發送給服務端。

token無狀態。

BATJ都會用到的接口鑑權cookie、session 和token

四、接口鑑權方案

接口鑑權token解決方案:完成登錄之後,獲取到token字符串,再次請求時加入。

接口鑑權session解決方案:完成登錄之後,獲取帶有session信息的cookie,再次請求時加入。

本文由檸檬班羅傑老師原創,轉載需註明出處!

"

相關推薦

推薦中...