對session和cookie的理解

帥氣的大博哥發表於2020-10-27

兩者都存在有效期的說法

我們第一次訪問系統後端時,後端會生成一個session來為本次請求服務,並把session的id返回瀏覽器端,存在名字為JSESSIONID的cookie中;

後端生成的session存在有效期的說法,好像預設是30分鐘,可以通過設定指定有效時間;瀏覽器中的cookie也存在有效期的說法,預設是關閉瀏覽器後cookie過期,也可以通過設定來指定有效時間;

兩者的對應關係

後端的session和前端cookie中的sessionid是對應的,兩者任意一方失效,就會導致對應不上,從而會使後端重新生成session;

以下三種概括了對應不上的情況:

  1. 在cookie的有效期內(不關閉瀏覽器),並且session也在有效期內(不超過30分鐘)時,我們繼續訪問後端資源,瀏覽器會帶著名字為JSESSIONID的cookie的值去往後端,後端根據值查詢系統中對應的session,為該次請求服務;
  2. 在cookie的有效期內(不關閉瀏覽器),但是session已經過期(超過了30分鐘),我們繼續訪問後端資源,瀏覽器仍然會帶著名字為JSESSIONID的cookie的值去往後端,但是後端根據該值在系統中查詢不到對應的session了,所以會重新生成一個session來為該次請求服務,並把新session的id返回給瀏覽器,存在名字為JSESSIONID的cookie中。
  3. Cookie已經過期(關閉並重新開啟了瀏覽器),但是session還在有效期內(不超過30分鐘)時,我們繼續訪問後端資源,瀏覽器中就沒有名字為JSESSIONID的cookie的了,到達後端後,後端認為這是一次全新的請求,會生成一個session來為該次請求服務,並把session的id返回給瀏覽器,存在名字為JSESSIONID的cookie中。

兩者有效期的區別

1、cookie預設的有效期就是從開啟瀏覽器到關閉瀏覽器的這段時間,關閉了瀏覽器cookie就過期了;但是如果我們設定了瀏覽器的有效期為1個小時,則無論中途我們做了什麼,到1個小時後,cookie都會過期,過期的cookie就不會再被帶著去後端了。

2、session預設的有效期是30分鐘,即如果30分鐘沒有操作後端,則30分鐘後session就會過期消亡;但是如果中途我們操作了後端,則session的有效期就會從我們操作過後重新開始算;即如果我們一直操作,則session一直都不會過期。

兩者過期之後的表現

1、cookie過期之後,當我們再次向後端傳送請求時,不會攜帶過期的cookie去往後端了;如果開啟瀏覽器時cookie還沒過期,過了一會兒過期了,則cookie不會自動從瀏覽器中刪除,但是如果關閉瀏覽器再開啟,或者重新整理瀏覽器,則過期的cookie就會從瀏覽器中消失了。

2、session過期之後,會從伺服器中被垃圾回收掉。

 

 

相關文章