1. 程式人生 > 實用技巧 >cookie與session的原理及區別

cookie與session的原理及區別

1、cookie使用原理使用者名稱+密碼

cookie是儲存在使用者瀏覽器端,使用者名稱和密碼等明文資訊

  1.使用者向伺服器傳送使用者名稱和密碼。

  2.驗證伺服器後,相關資料(如使用者角色,登入時間等)將儲存在當前會話中。

  3.伺服器向用戶返回session_id,session資訊都會寫入到使用者的Cookie。

  4.使用者的每個後續請求都將通過在Cookie中取出session_id傳給伺服器。

  5.伺服器收到session_id並對比之前儲存的資料,確認使用者的身份。

  

1.2 session使用原理

session是儲存在伺服器端的一段字串,相當於字典的key

  

2、session使用缺點

      1.這種模式最大的問題是,沒有分散式架構,無法支援橫向擴充套件。
     2.如果使用一個伺服器,該模式完全沒有問題。
     3.但是,如果它是伺服器群集或面向服務的跨域體系結構的話,則需要一個統一的session資料庫庫來儲存會話資料實現共享,
     4.這樣負載均衡下的每個伺服器才可以正確的驗證使用者身份。

3、常用解決session方法

     1.一種解決方案是通過持久化session資料,寫入資料庫或檔案持久層等。
     2.收到請求後,驗證服務從持久層請求資料。
     3.依賴於持久層的資料庫或者問題系統,會有單點風險,如果持久層失敗,整個認證體系都會掛掉。

session缺點

第一種:沒有session持久化

1 2 3 4 5 沒有分散式架構,無法支援橫向擴充套件 session預設儲存在記憶體中,如果把程式碼部署在多臺機器上,session儲存到了其中某一臺機器 的記憶體中 使用者如果在A機器上登入,只有A機器的記憶體中存了這個session的key,如果請求nginx路由到B 機器,B機器記憶體中沒有這個session資料,就需要從新登入

第二種:寫入資料庫或檔案持久層

1 2 3 解決了橫向擴充套件問題 資料庫持久層出現問題,所有叢集都沒辦法登入, 單點故障
如果資料放到mysql中,使用者量過大,查詢很慢,效率很低