1. 程式人生 > >Cookie和Session的關係

Cookie和Session的關係

首先給出結論:

Session是儲存在cookie中的;

 

1.cookie

(1)什麼是cookie?

小餅乾,用於資料的臨時儲存,以便更方便的進行身份驗證;

(2)過程原理:

① 瀏覽器端向伺服器端(Tomcat)傳送請求  -》

② 伺服器根據需要生成cookie物件,並把一些資料(http請求頭中的)儲存在cookie中 -》

③ 伺服器再把cookie放在http響應頭中一併發還給瀏覽器  -》

④ 瀏覽器接收到伺服器響應後,就會提取該cookie並將其儲存在瀏覽器端;

那麼,當瀏覽器在下一次訪問"該"伺服器的時候,瀏覽器就會把cookie放在http請求頭中一併發還給伺服器。伺服器就會從請求頭中提取該cookie物件,判別cookie中的資料,然後做出一些個性化的響應。

(3)生命週期:

① 預設為:會話結束就失效(關閉瀏覽器視窗,cookie就消失;<同理:關閉cookie,session就消失,詳見下文>);

(4)儲存位置:

瀏覽器端;

這樣的cookie被稱為:會話cookie

會話cookie 一般儲存在記憶體中,而不是硬碟上。但是,如果設定了有效期,cookie就會被儲存在硬碟上(直到到達有效期,cookie就會被瀏覽器相關的程式給清除掉)

PS:忽然想起來,每當我們解除安裝一個軟體(比如:瀏覽器)時,它就會提示我們是否清除cookie使用者相關資訊。不覺明歷 !_   !

(5)cookie的缺陷:

① 大小和數量限制
            通常來說每個站點只能儲存20個cookie,每個cookie大小是4K以內;這裡的站點指的是?我也不知道啊,我猜是網站 site

② 資料安全性
            由於http請求中是以明文的方式傳遞資料的,所以它是不安全的哦!

2. Session:

(1)什麼是Session?

話說Session的歷史:它在web開發中是一個非常重要的概念,但是這個概念非常抽象也非常難定義,也是被濫用最多的一個名字之一;Session在不同場合來說,它的含義也不一樣,這裡主要介紹HTTPSession;HTTPsession就是服務端為客戶端建立的一個物件,這個物件用來儲存一些使用者的資料,這些資料用於服務端和客戶端的“狀態儲存

”;什麼是狀態儲存?麻蛋

(2)過程原理:

① 瀏覽器傳送http請求到伺服器端 ->

② 伺服器端會根據請求需求生成一個Session物件,並且對這個Session賦予一個唯一的編號 -> 

③ 伺服器端把需要的資料記錄到對應的Session物件中 ->

④ 接著,伺服器端做一些邏輯處理,然後把Session物件的唯一編號,放在一個cookie中 ->

⑤ 最後,隨著處理邏輯的完成,把響應發還給瀏覽器端 ->

⑥ 那麼,瀏覽器端就會把這個帶有Session ID的cookie儲存起來 ->

當下一次瀏覽器端傳送請求到“該”伺服器的時候,就會發送這個帶有session ID的cookie,伺服器拿到這個帶有session ID的cookie,就會取出對應的session ID,然後再到伺服器中找到對應的session物件(session是存在服務端的);最後,當伺服器辨別出這個使用者後,就會對使用者進行一些個性化的響應;

參考地址:https://blog.csdn.net/springsen/article/details/7833582

3. cookie與session的比較

(1)資料儲存:

cookie以明文的方式儲存在瀏覽器端,session儲存在伺服器端;

(2)安全性:

由於儲存位置的原因,也就出現了瀏覽器端是不夠安全的(但是,我們可以通過加密技術解決這個問題),伺服器端更為安全;

(3)生命週期:

cookie的生命週期是累計時間的,即:到點就失效;session是以最後一次訪問時間為倒計時的開始時間,同時,它還可以直接呼叫API來使他失效;

(4)使用原則:

cookie的缺陷,每個站點只能儲存20個cookie,每個cookie大小4k以內;session是存放伺服器端,會佔用伺服器記憶體,因此我們建議不要往session中存放過多過大的物件