關於session和cookie
近期有被問到一個問題--“session和cookie的本質是什麼?為什麼需要這兩種技術?”,我一臉懵,所以在此記錄一下整理的一些知識點。
首先, Session和Cookie的本質是會話跟蹤技術 。 web應用程式是使用HTTP協議傳輸資料的,由於HTTPS是無狀態的,一旦資料交換完畢,客戶端與伺服器端的連線就會關閉,再次交換資料需要重新建立連線。 簡單一點說明問題:HTTP協議是無狀態的協議。這就意味著伺服器無法從連線上跟蹤會話。即使用者A購買了一件商品放入購物車內,當再次購買商品時伺服器已經無法判斷該購買行為是屬於使用者A的會話還是使用者B的會話了。要跟蹤該會話,必須引入一種機制。
首先是Cookie ,Cookie本質是伺服器傳送給客戶端的特殊資訊,而這些資訊是以文字的形式儲存在客戶端的,然後客戶端每次傳送請求的時候,都會帶上這些資訊,從而可以讓伺服器知道是哪一個使用者,個人理解,Cookie就好像是一個身份證,無論要去辦什麼事情,請隨時帶著自己的身份證,以證明你是誰,接著才能知道接下來的事情應該是什麼。下面簡單的用圖的方式說明一下,cookie傳遞的過程:
注意:cookie具有不可跨域性。
然後是Session ,Session是另一種記錄客戶狀態的機制,不同於Cookie技術,Session是記錄在伺服器端的。客戶端瀏覽器訪問伺服器的時候,伺服器把資訊以某種形式記錄下來。產生一個SessionId來表明這塊記憶體空間是你的(在tomcat中稱為jsesessionId)。同時,會在伺服器返回給瀏覽器端時,將sessionId返回,然後記錄在Cookie中,也就是隻要瀏覽器沒有關閉,並且沒有失效,那麼你每次傳送資訊都會帶著sessionId,那麼伺服器就會根據sessionId找到對應的儲存空間,找到相應的資訊,從而就完全能將http無狀態的問題解決掉了。但是,如果瀏覽器關閉,那麼伺服器就會將對應的sessionId對應的儲存空間清除,下次登陸的時候,重新產生新的儲存空間和對應的sessionId。
注意:當程式需要為某個客戶端的請求建立一個session時,伺服器首先檢查這個客戶端的請求裡是否已包含了sessionId,如果已包含則說明以前已經為此客戶端建立過session。如果客戶端請求不包含sessionId,則為此客戶端建立一個session並且生成一個與此session相關的sessionid。
參考文章:https://www.cnblogs.com/zhouhbing/p/4204132.html
https://blog.csdn.net/jpygx123/article/details/82973816