cookie session
前言
HTTP是無狀態協議,就是指這一次請求和上一次請求沒有任何關係,沒有關聯,這樣的好處是快速。但有時咱們又須要某個域名下的全部網站可以共享某些數據(一個用戶的全部請求操做都應該屬於同一個會話),因而cookie和session就出現了。跨域
流程:瀏覽器
- 客戶端發送一個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

安全性不足
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大小有限制