cookie與session的定義及二者間關係

cookie session

前言

HTTP是無狀態協議,就是指這一次請求和上一次請求沒有任何關係,沒有關聯,這樣的好處是快速。但有時咱們又須要某個域名下的全部網站可以共享某些數據(一個用戶的全部請求操做都應該屬於同一個會話),因而cookiesession就出現了。跨域

流程:瀏覽器

  • 客戶端發送一個HTTP請求到服務端
  • 服務端接收到客戶端請求後,創建一個session,併發送一個HTTP響應到客戶端,這個響應頭,其中包含了Set-Cookie頭部。該頭部包含了SessionID,會在客戶端設置一個屬於這個域名下的cookie
  • 在客戶端發起第二次請求時,瀏覽器會自動在請求頭中添加cookie(包括SessionID)
  • 服務器接收請求,分解cookie,驗證信息,覈對成功後返回響應給客戶端

cookie

定義

類型爲「小型文本文件」,是某些網站爲了辨別用戶身份,進行Session跟蹤而儲存在用戶本地終端上的數據,由用戶客戶端計算機暫時或永久保存的信息。安全

特色/性質

具備保質期

Cookie有永久的也有臨時的,Cookie中的maxAge決定其有效期,單位爲秒。服務器

  • maxAge爲正數時,則表示Cookie會在maxAge秒後自動失效。這種狀況下,瀏覽器會將Cookie寫到對應的Cookie文件中。不管關閉瀏覽器仍是電腦,只有時間到了此Cookie纔會失效。
  • maxAge爲負數時(默認值爲-1),則表示此Cookie僅在本瀏覽器窗口以及本窗口打開的子窗口內有效,關閉窗口即失效。這類Cookie爲臨時性,Cookie信息保存在瀏覽器內存中。
  • maxAge爲0,則表示刪除該Cookie。

知足同源策略

Cookie不可跨域名,這由Cookie的隱私安全機制決定,禁止網站非法獲取其餘網站的Cookie。正常狀況下,同一個一級域名下的兩個二級域名不能交互使用Cookie。cookie

內存大小受限

Cookie有個數和大小的限制,大小通常爲4k。session

2376637829-5b8cb6a4db504_articlex.png

安全性不足

Cookie文件能夠在本地被更改,因此不該該把敏感數據放在Cookie中,而且要注意加密。併發

不能直接修改、刪除

  • 修改:只須要新建一個同名的Cookie,添加到response中覆蓋原來的Cookie。
  • 刪除:只須要新建一個同名的Cookie,並將maxAge設置爲0,並添加到response中覆蓋原來的Cookie。

Session

定義

Session(會話)是另外一種記錄客戶狀態的機制,保存在服務器上。客戶端瀏覽器訪問服務器時,服務器把客戶端信息以某種形式記錄在服務器上,當客戶端瀏覽器再次訪問時只須要從該Session中查找該客戶的狀態便可。性能

實現

  • 首先,服務器開闢Session存儲空間並建立Session,服務器會爲該Session生成惟一的SessionID並添加相應內容
  • 服務器將SessionID發送給客戶端,客戶端將其保存
  • 當客戶端再次發送請求時會帶上SessionID
  • 服務器接收請求後根據SessionID找到相應的Session

特色/性質

具備生命週期

Session在用戶第一次訪問服務器時自動建立,生成後,只要用戶繼續訪問,服務器就會更新Session的最後訪問時間,並維護該Session。網站

具備有效期

Session有maxInactiveInterval屬性,爲超時時間。若是一個用戶超過了超時時間沒訪問過服務器,Session就自動失效。加密

通常與Cookie共同使用(依賴關係)

Session須要使用Cookie做爲識別標誌。HTTP協議是無狀態的,Session不能依據HTTP鏈接來判斷是否爲同一客戶,所以服務器向客戶端瀏覽器發送一個名爲JSESSIONID的Cookie,它的值爲該Session的id(也就是HttpSession.getId()的返回值)。Session依據該Cookie來識別是否爲同一用戶。

Cookie與Session的關係

區別

  • Cookie數據存放在客戶的瀏覽器上,Session數據放在服務器上
  • Cookie不是很安全,Session更加安全
  • Session會在必定時間保存在服務器上。當訪問增多,會佔用服務器的性能。爲減輕壓力,可以使用Cookie
  • Cookie大小有限制
相關文章
相關標籤/搜索