cookie、session和會話保持


1、會話

在程序中,會話跟蹤是很重要的事情。理論上,一個已登錄用戶,在這次登錄后進行的所有請求操作都應該屬於同一個會話,而另一個用戶的所有請求操作則應該屬於另一個會話,二者不能混淆。例如,用戶 A 在某一商城登錄后,然后又選購商品,將商品加入了購車等,這一系列的操作應該都屬於同一個會話,而不用戶 B 或用戶 C 的操作又屬於另外的會話。

Web應用程序是使用HTTP協議傳輸數據的。HTTP協議是無狀態的協議。一旦數據交換完畢,客戶端與服務器端的連接就會關閉,再次交換數據需要建立新的連接,這就意味着服務器無法從連接上跟蹤會話,通俗點來說下一個接口無法知道上一個接口做了什么,保存了什么信息等。比如用戶 A 將一件商品放入購物車內,當再次將商品加入服務器(又調用了一次接口),此時已經無法判斷該購買行為是屬於用戶 A 的會話還是用戶 B 的會話了。要跟蹤該會話,必須引入一種機制。

Cookie 就是這樣的一種機制。它可以彌補HTTP協議無狀態的不足。在 Session 出現之前,基本上所有的網站都采用 Cookie 來跟蹤會話。

 

2、cookie

參考:https://www.cnblogs.com/wenxuehai/p/10470716.html

3、session

在WEB開發中,服務器可以為每個用戶瀏覽器創建一個會話對象(session對象),注意:一個瀏覽器獨占一個session對象(默認情況下)。因此,在需要保存用戶數據時,服務器程序可以把用戶數據寫到用戶瀏覽器獨占的 session 中,當用戶使用瀏覽器訪問其它程序時,其它程序可以從用戶的 session 中取出該用戶的數據,為用戶服務。

Session 代表着服務器和客戶端一次會話的過程。Session 對象存儲特定用戶會話所需的信息。這樣,當用戶在應用程序的 Web 頁之間跳轉時,存儲在 Session 對象中的信息將不會丟失,而是在整個用戶會話中一直存在下去。當客戶端關閉會話,或者 Session 超時失效時會話結束。

也就是說,session 的作用是能夠讓服務器在某一用戶登錄之后,用戶進行的所有操作都保持在同一會話之內,這樣就能夠記住用戶的狀態,並且能記住用戶在這次會話中進行的一系列操作和保存的信息。

session 存儲在服務器端,session 是用來存儲信息的,在 cookie 里面插入的只是 session id,是識別某一 session 的唯一標識,

3.1、session 基於 cookie 的實現

服務器創建 session 出來后,會把 session 的唯一 id 號,以 cookie 的形式回寫給客戶機,這樣,只要客戶機的瀏覽器不關,再去訪問服務器時,都會帶着 session 的 id 號去,服務器發現客戶機瀏覽器帶session id過來了,就可以通過 session id 來識別出這次會話是屬於哪次會話,就可以使用內存中與之對應的 session 為之服務。

在創建了Session的同時,服務器會為該Session生成唯一的Session id,而這個Session id在隨后的請求中會被用來重新獲得已經創建的Session;在Session被創建之后,就可以調用Session相關的方法往Session中增加內容了,根據這些內容也可以識別出是當前是哪個用戶(比如可以存儲 userId 等用戶信息),這些內容只會保存在服務器中,發到客戶端的只有Session id;當客戶端再次發送請求的時候,會將這個Session id帶上,服務器接受到請求之后就會依據Session id找到相應的Session,從而再次使用之。

3.2、session 的存儲

session 存儲在服務器端,但不是保存在內存中,而是保存在文件或數據庫中。 

服務器端可以在每次相應時刷新 session 的過期時間,生成一個

3.3、session 是如何刷新過期時間的

每個用戶訪問,都會在服務器生成一個SESSION文件,當用戶發起請求時,session 文件的過期時間就會被刷新。當一個SESSION文件,超過設定的時間沒有被讀寫,則會被認為已過期,該文件就會被刪除。

session 是如何刷新過期時間的,參考:https://www.jianshu.com/p/328e5a63e23c

 

4、session 和 cookie 的區別

  • 作用范圍不同,Cookie 保存在客戶端(瀏覽器),Session 保存在服務器端。
  • 存取方式的不同,Cookie 只能保存 ASCII,Session 可以存任意數據類型
  • 有效期不同,Cookie 可設置為長時間保持,比如我們經常使用的默認登錄功能,Session 一般失效時間較短,客戶端關閉或者 Session 超時都會失效。
  • 隱私策略不同,Cookie 存儲在客戶端,比較容易遭到不法獲取,早期有人將用戶的登錄名和密碼存儲在 Cookie 中導致信息被竊取;Session 存儲在服務端,安全性相對 Cookie 要好一些。
  • 存儲大小不同, 單個 Cookie 保存的數據不能超過 4K,Session 可存儲數據遠高於 Cookie。

 

5、會話保持

會話保持是負載均衡最常見的問題之一,會話保持有時候又叫做粘滯會話(Sticky Sessions)。會話保持是指在負載均衡器上的一種機制,可以識別客戶端與服務器之間交互過程的關聯性,在作負載均衡的同時還保證一系列相關聯的訪問請求會分配到一台服務器上。

5.1、什么時候需要會話保持

比如在某些要求登錄狀態的情境下,要求客戶端和服務器之間保持一個會話(session)以記錄客戶端的各種信息。比如在大多數電子商務的應用系統或者需要進行用戶身份認證的在線系統中,一個客戶與服務器經常經過好幾次的交互過程才能完成一筆交易或者是一個請求的完成。由於這幾次交互過程是密切相關的,服務器在進行這些交互過程的某一個交互步驟時往往需要了解上一次或上幾次的交互過程處理結果,這就要求所有這些相關的交互過程都由一台服務器完成,而不能被負載均衡器分散到不同的服務器上。否則可能出現異常情景:

1)客戶端已經輸入了正確的用戶名和口令,但進行一些操作服務器並不知道該客戶已登錄,所以返回未登錄提示信息,客戶端反復跳到登錄頁面;
2)用戶輸入了正確的驗證碼,但是總提示驗證碼錯誤
3)客戶端放入購物車的物品丟失,因為沒有記住上次交互保存的信息


因此會話保持機制的意義就在於,確保在合適的情境下,將來自相同客戶端的請求轉發至后端相同的服務器進行處理。換句話說,就是將客戶端與服務器之間建立的多個連接,都發送到相同的服務器進行處理。如果在客戶端和服務器之間部署了負載均衡設備,很有可能這多個連接會被轉發至不同的服務器進行處理。如果服務器之間沒有會話信息的同步機制,會導致其他服務器無法識別用戶身份,造成用戶在和應用系統發生交互時出現異常。

5.2、基於cookie 和 session的會話保持實現

用戶第一次請求服務器的時候,服務器根據用戶提交的相關信息,創建創建對應的 Session ,請求返回時將此 Session 的唯一標識信息 SessionID 返回給瀏覽器,瀏覽器接收到服務器返回的 SessionID 信息后,會將此信息存入到 Cookie 中,同時 Cookie 記錄此 SessionID 屬於哪個域名。

當用戶第二次訪問服務器的時候,請求會自動判斷此域名下是否存在 Cookie 信息,如果存在自動將 Cookie 信息也發送給服務端,服務端會從 Cookie 中獲取 SessionID,再根據 SessionID 查找對應的 Session 信息,如果沒有找到說明用戶沒有登錄或者登錄失效,如果找到 Session 證明用戶已經登錄可執行后面操作。SessionID 是連接 Cookie 和 Session 的一道橋梁,大部分系統也是根據此原理來驗證用戶登錄狀態。

參考:https://blog.csdn.net/weixin_41646716/article/details/90243344https://blog.csdn.net/Dustin_CDS/article/details/79597379

 

6、一個服務器如何根據 session 來區分不同的用戶

服務器是根據 session id 來區分用戶的。當服務器接收到用 cookie 傳過來的 session id 時,服務端會通過對比自身存儲的 session Id 來判斷用戶之前是否存在,並返回對應的內容給不同用戶。

在創建了Session的同時,服務器會為該Session生成唯一的Session id,而這個Session id在隨后的請求中會被用來重新獲得已經創建的Session;在Session被創建之后,就可以調用Session相關的方法往Session中增加內容了,而這些內容只會保存在服務器中,發到客戶端的只有Session id;當客戶端再次發送請求的時候,會將這個Session id帶上,服務器接受到請求之后就會依據Session id找到相應的Session,從而再次使用之。

參考:https://blog.csdn.net/qq_17125355/article/details/44621195

 

7、session 在項目中的使用詳細介紹

參考:https://www.cnblogs.com/saysmy/p/8535571.html


免責聲明!

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



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