http無狀態和解決認證的方法


http

http無狀態,是指http協議對事務處理沒有記憶功能。瀏覽器和服務器兩次請求和響應,之沒有任何關系。

好處:響應速度快。

壞處:由於每次請求沒有關聯,所以我們對一系列連續請求進行處理時就比較繁瑣。

當然多次請求可以使用數據每次保存用戶狀態進行驗證,但是每次都去訪問數據庫,對數據庫造成壓力。

 

瀏覽器會話

 所謂的會話過程就是指從打開瀏覽器到關閉瀏覽器的過程。

 

為了解決HTTP無狀態的缺點,cookie應用而生,cookie中保存用戶的少量信息,每次請求時去驗證cookie中的用戶信息即可。這樣就解決了HTTP無狀態的問題。
但是這樣也會有一個問題,cookie大小是有限制的,且cookie是保存在瀏覽器的用戶可以查看修改cookie中的用戶信息,會造成一個數據不安全的問題。

 

為了解決cookie大小和不安全的問題,session應用而生,session一半存在服務器,一半存在cookie中,當每次請求驗證用戶信息的時候,就可以根據cookie中的sessionId到服務器進行獲取驗證用戶信息。

這樣就解決了HTTP協議的無狀態和cookie的不安全問題。

 

瀏覽器關閉,會話失效是因為關閉瀏覽器的時候的時候存在瀏覽器進程中的cookie失效,導致sessionId丟失。
當我們再次打開瀏覽器的時候創建的是一個新的cookie會話,攜帶的是一個新的sessionId,開始的是一次新的瀏覽器服務器的一次會話。

會話雖然失效,但是服務器依然存放的前一次的session,我們一般不做處理等待他自動失效。

 

cookie有兩種:1.存放在瀏覽器進程中。2存放在硬盤中。是可以選擇被設置的。

單體服務解決服務器無狀態和用戶鑒權:

 

單體系統中不存在cookie跨域和session服務器共享問題。

使用瀏覽器會話cookie和session可以得到解決。

 

 

微服務解決服務器無狀態和用戶鑒權:

微服務要考慮cookie跨域和session服務器共享問題。

域名相同的情況下:

spring-session+redis:當用戶登錄的時候我們會存放session到服務端和瀏覽器單,同時session一部分信息也會被存放到redis,當我們攔截認證時就可以去redis取session進行驗證判斷。

redis+token:當用戶登錄成功時生成token,將sessionId或者用戶信息做key,token做value存放到redis,每次請求時攔截驗證。

      用戶信息+token可以實現一個用戶同時只能登錄一次。

jwt生成token方式:當用戶登錄成功時生成token,token返回給用戶,客戶端每次請求時攜帶token,然后服務端驗證token是否正確。  token必須要在每次請求時發送給服務器,它應該保存在請求頭中,另外,服務器要支持CORS(跨來源資源共享)策略,一般我們在服務端這么做就可以了 Access-Control-Allow-Origin:*。

 

域名不相同的情況下:

redis+token:當用戶登錄成功時生成token,將sessionId或者用戶信息做key,token做value存放到redis,每次請求時攔截驗證。

      用戶信息+token可以實現一個用戶同時只能登錄一次。

SSO單點登錄:需要一個獨立的注冊中心,用戶第一次登錄被攔截到認證中心進行登錄,認證中心給用戶辦法token,用戶每次登錄都攜帶token,每次請求驗證token是否正確。

 

 

*************** 當你發現自己的才華撐不起野心時,就請安靜下來學習吧!***************


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM