三種會話管理方式

2022-05-08 12:24:09 字數 2495 閱讀 2289

1. http是無狀態的協議

http協議不要求客戶端(瀏覽器)在每次請求中標明身份,客戶端和伺服器間沒有乙個持久連線來用於多個頁面間的訪問。客戶端發乙個請求,伺服器給乙個回覆。

2. 三種會話管理方式

第一種:session

http過程

處理動作

1. 第一次請求

伺服器建立乙個session物件,並為其分配唯一的sessionid

2. 響應:包含sessionid的cookie

把sessionid通過cookie返回瀏覽器

3. 請求:登入的資訊,使用者名稱和密碼

通過cookie把sessionid傳回伺服器

伺服器根據sessionid找到對應的session物件

驗證使用者名稱和密碼,並把登入憑證放到session中

4. 響應:包含sessionid的cookie且有登入憑證

把sessionid通過cookie返回瀏覽器

5. 請求:新的訪問請求

根據sessionid找到session物件,判斷其中是否有登入憑證

第二種:cookie        

http過程

處理動作

1. 請求:登入的使用者名稱和密碼

使用者發起登入請求,把登入資訊一起傳到伺服器

2. 響應:包含登入憑證的cookie(set-cookie頭部)

伺服器驗證是否滿足條件,如果滿足則建立乙個登入憑證

將登入憑證進行數字加密,把加密後的資訊寫入cookie,且給cookie乙個名字

把cookie返回給客戶端

3. 請求:包含cookie頭部

伺服器根據cookie名字從請求頭部中獲取cookie值

進行解密處理,做數字簽名認證

4. 響應:乙個http響應

根據上面的處理作出反應

第三種:token        

http過程

處理動作

1. 發起請求,登入使用者名稱和密碼

使用者發起登入請求,把登入資訊一起傳到伺服器

伺服器將登入憑證做數字簽名,得到token串

2. 響應:返回token

把token返回給客戶端

客戶端本地儲存token

3. 請求:token放在header或url中

token儲存在header或url中傳到伺服器

伺服器對token進行解密和簽名認證,拿到登入憑證,判斷有效性

4. 響應

根據上面的處理作出反應

乙個例子(從網上搜出來的)

當註冊 /登入成功後: 

1. 指定乙個指紋,任意值都可以,只要這個值對這個使用者沒有使用過即可

2. 將指紋和使用者 id 拼起來並簽名,組成 簽名後的字串-使用者 id-指紋 這樣結構的 token

3. 將使用者 id 與指紋對應起來放到快取中,並且設定快取過期時間,這個時間就是 token 有效期

4. 將 token 返回給客戶端

當使用者再次請求時: 

1. 將 token 中的使用者 id 和指紋再簽名(通過服務端私鑰),比對提交的 token 簽名後的字串 就可將篡改或偽造的 token 過濾掉了(或許這一步有更好的實現方式)。 

2. 過了上一步,仍然無法確定 token 是否已被吊銷。獲取快取中的指紋與提交的 token 的指紋比對,若快取中取不到指紋值(快取已設定過有效期期)或快取中的指紋與 token 的指紋值不相符,就說明這個 token 被吊銷了。

3. 通過了上面兩步,表示這個請求是已認證了的 

3. 參考鏈結

還是一些不太清楚的地方,如果有錯誤還請指出~

記憶體管理方式

記憶體管理方式 塊 段 頁 段頁 頁式管理 頁式管理的基本原理將各程序的虛擬空間劃分成若干個長度相等的頁 page 頁式管理把記憶體空間按頁的大小劃分成片或者頁面 page frame 然後把頁式虛擬位址與記憶體位址建立一一對應頁表,並用相應的硬體位址變換機構,來解決離散位址變換問題。頁式管理採用請...

管理方式調整

最近加班加成狗,另外,在工作安排和管理上,也覺得一些地方不太對勁,也覺得有些事情管的過細,有些事情缺又管的太粗,所以思前想後,覺得我應該在管理方式得做一些調整,以適應目前的形式,解決發現的問題問題 1 主動合理安排任務,不干涉執行 任務要更主動安排,要更詳細描述,把期望目標和客戶需求描述的更詳細。例...

在框架中獲取會話session的三種方式

第一種 耦合性最強方式,獲取的原始的三個物件 步驟如下 1.獲取請求 2.獲取會話 3.獲取應用程式 第二種 解耦合方式 1.獲取請求 maprequest map actioncontext.getcontext get request 2.獲取會話 mapsession actioncontex...