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的區別
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的區別
cookie:客戶端和服務端都能創建cookie,都是存放在客戶端。存放一些小而不敏感的數據,並且數據類型只能是字符串(json)。
session:服務端生成session,存放在服務端。可以存放任意數據,java中session中可以存放任意對象。
session必須依賴cookie實現。
三、session和token的區別
session:服務器生成、存儲、驗證,以cookie的方式傳給客戶端,客戶端以同樣方式發送給服務端。
session有狀態。
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的區別
cookie:客戶端和服務端都能創建cookie,都是存放在客戶端。存放一些小而不敏感的數據,並且數據類型只能是字符串(json)。
session:服務端生成session,存放在服務端。可以存放任意數據,java中session中可以存放任意對象。
session必須依賴cookie實現。
三、session和token的區別
session:服務器生成、存儲、驗證,以cookie的方式傳給客戶端,客戶端以同樣方式發送給服務端。
session有狀態。
token:服務器生成、驗證,以cookie或者請求頭的方式傳給客戶端,客戶端以同樣方式發送給服務端。
token無狀態。
四、接口鑑權方案
接口鑑權token解決方案:完成登錄之後,獲取到token字符串,再次請求時加入。
接口鑑權session解決方案:完成登錄之後,獲取帶有session信息的cookie,再次請求時加入。
本文由檸檬班羅傑老師原創,轉載需註明出處!