session與cookie之間的關係

2021-10-01 18:04:38 字數 1843 閱讀 4394

user(客戶端) 請求 tomcat(伺服器), 屬於http請求。http請求是無狀態的,即每次服務端接收到客戶端的請求時,都是乙個全新的請求,伺服器並不知道客戶端的歷史請求記錄;所以當使用者從客戶端請求一次登入後,登入成功,再次進行請求時,因為tomcat不能識別這兩次會話都是來自同乙個瀏覽器,即服務端不知道客戶端的歷史請求記錄;就會再次彈出登入對話方塊。

為了解決客戶端與服務端會話同步問題。這便引出了下面幾個概念:cookie、session。

於是,我們便把伺服器中產生的會話sessionid儲存到客戶端瀏覽器cookie中去。在客戶端存在週期為瀏覽器關閉時,消失。這樣便解決了客戶端請求服務端會話不同步問題。

乙個http cookie的(網路cookie,瀏覽器cookie)是一小片資料的乙個伺服器傳送到使用者的網路瀏覽器。瀏覽器可以儲存它並將其與下乙個請求一起傳送回同一伺服器。通常,它用於判斷兩個請求是否來自同乙個瀏覽器 - 例如,保持使用者登入。它記住無狀態 http協議的有狀態資訊。

客戶端請求服務端,服務端(tomcat)會為這次請求開闢一塊記憶體空間,這個物件便是session物件, 儲存結構為concurrenthashmap。

session的目的:彌補http無狀態特性,伺服器可以利用session儲存客戶端在同乙個會話期間的一些操作記錄。

在同一連線上連續執行的兩個請求之間沒有鏈結。對於試圖與某些頁面連貫地相互作用的使用者而言,這立即存在問題,例如,使用電子商務購物籃。但是,雖然http本身的核心是無狀態,但http cookie允許使用有狀態會話。使用標頭可擴充套件性,http cookie被新增到工作流中,允許在每個http請求上建立會話以共享相同的上下文或相同的狀態。

1、伺服器如何判斷客戶端傳送過來的請求屬於同乙個會話?

用session id區分;session id 相同即認為是同乙個會話;  

在tomcat中session id中用jsessionid來表示;2、伺服器、客戶端如何獲取sessionid?sessionid在期間是如何傳輸的?

​ 伺服器第一次接收到請求時,開闢了一塊session空間(建立了session物件),同時生成乙個session id,並通過響應頭的set-cookie:「jsessionid=******x」命令,向客戶端傳送要求設定cookie的響應; 客戶端收到響應後,在本機客戶端設定了乙個jsessionid=******x的cookie資訊,該cookie的過期時間為瀏覽器會話結束;

接下來客戶端每次向同乙個**傳送請求時,請求頭都會帶上該cookie資訊(包含session id); 然後,伺服器通過讀取請求頭中的cookie資訊,獲取名稱為jsessionid的值,得到此次請求的session id;

​ 注意:伺服器只會在客戶端第一次請求響應的時候,在響應頭上新增set-cookie:「jsessionid=******x」資訊,接下來在同乙個會話的第二第三次響應頭里,是不會新增set- cookie:「jsessionid=******x」資訊的; 而客戶端是會在每次請求頭的cookie中帶上jsessionid資訊; 

flask之cookie與session區別

使用者身份校驗是web訪問時的重要步驟。常用的身份校驗方式有cookie,session和jwt三種。其中cookie和session是較傳統的校驗方式,其採用將使用者資訊儲存在伺服器或瀏覽器中,使用者訪問時,攜帶相關資訊,有伺服器進行校驗。最近流行的jwt令牌是一種分布式的跨域驗證機製造。其允許跨...

php筆記之 cookie與session

cookie將資料儲存在客戶端,建立起使用者與伺服器之間的聯絡,通常可以解決很多問題,但是cookie仍然具有一些侷限 cookie相對不是太安全,容易被盜用導致cookie欺騙 單個cookie的值最大只能儲存4k 每次請求都要進行網路傳輸,占用頻寬 session是將使用者的會話資料儲存在服務端...

cookie與session的關聯

前提 cookie沒有被禁用。當用瀏覽器登入到某 伺服器時,先找對應的cookie檔案,當首次訪問是當然沒有cookie檔案,所以在請求頭部中沒有cookie的內容,即在請求頭部中沒有類似cookie jsessionid 的內容,這時當請求到達伺服器後,伺服器看請求頭中沒有jsessionid值,...