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中存放過多過大的物件