Cookie與Session

二者出現緣由?瀏覽器

Cookie和Session出現的緣由:因爲http 協議是無狀態的,服務器沒法肯定此次請求和上次的請求是否來自同一個客戶端。利用session和cookie可讓服務器知道不一樣的請求是否來自同一個客戶端。緩存

定義及工做原理:安全

Cookie是服務器在本地機器上存儲的小段文本並隨每個請求發送至同一服務器。用戶在第一次請求後,由服務器生成Cookie,並封裝在響應頭中,客戶端在接收到響應後存儲在客戶端;客戶端再次發生請求時,請求中會攜帶Cookie數據,由服務器對會話進行跟蹤Cookies保存在客戶端,主要內容包括:名字,值,過時時間,路徑等等。服務器

分類cookie

會話cookie和持久cookie
  會話cookie:不設置過時時間,只要關閉瀏覽器窗口cookie就消失了。會話cookie不保存在硬盤上,保存在內存裏。
  持久cookie:設置過時時間,瀏覽器就會把cookie保存到硬盤上,關閉後再次打開瀏覽器,這些cookie依然有效直到超過設定的過時時間。存儲在硬盤上的cookie能夠在不一樣的瀏覽器進程間共享。而對於保存在內存的cookie,不一樣的瀏覽器有不一樣的處理方式。session

Session工做原理

  • 在服務器中系統會爲每一個會話維護一個Session。不一樣的會話,對應着不一樣的Session。那麼如何作到在同一會話過程當中,一直使用的是同一Session對象?
  1. 1.寫入Session列表
  • 服務器對當前應用中的Session是以Map形式進行管理的,這個Map稱爲Session列表。該Map的key爲32位的隨機字符串,這個隨機字符串稱爲JSessionID,value則爲Session對象的引用。
  • 當用戶第一次提交請求時,服務端Servlet中執行get.Session(),會自動生產一個Map.Entry對象,key爲JSessionID,value則爲Session對象的引用。

Cookie與Session

2.服務器生成併發送Cookie併發

  • 在將Session信息寫入Session列表後,系統會自動將"JSESSIONID"做爲name,32位的隨機串做爲value,以Cookie的形式存放到響應報頭中,將該Cookie發送到客戶端

3.客戶端接收併發送Cookieide

  • 客戶端接收到這個Cookie後會將其放置瀏覽器緩存中。當用戶提交第二次請求時,會將緩存中的這個Cookie放在請求的頭部發送到服務端

4.在Session列表中查找編碼

  • 服務器會根據請求中的Cookie中的JSESSIONID,從Map中查找對應的value,即Session對象。而後對Session對象的域屬性進行讀寫操做3d

    Cookie和Session的區別

    1. Cookie 在客戶端(瀏覽器、易僞造、不安全),Session 在服務器端(會消耗服務器資源)。
    2. Cookie 只能保存ASCII字符串,若是是Unicode字符或者二進制數據須要先進行編碼。Cookie中也不能直接存取Java對象。 Session可以存取不少類型的數據,包括String、Integer、List、Map等,Session中也能夠保存JJava對象。
相關文章
相關標籤/搜索