會話:客戶端打開與服務器的連接發出請求到服務器響應客戶端請求的全過程稱之為會話。
http協議是“無狀態”協議,不能保存用戶信息,需要判斷是否是同一個用戶,需要會話跟蹤。cookies和session都是用來跟蹤瀏覽器用戶身份的會話方式,但兩者應用場景不一樣。
Cookie 是Web 服務器發送給客戶端(瀏覽器)的一小段信息,客戶端請求時可以讀取該信息發送到服務器端,進而進行用戶的識別。對于客戶端的每次請求,服務器都會將 Cookie 發送到客戶端,在客戶端可以進行保存,以便下次使用。
Session 代表著服務器和客戶端一次會話的過程。每一個用戶都有一個不同的 session,各個用戶之間是不能共享的,是每個用戶所獨享的,在 session 中可以存放信息。Session 的實現依賴于 Cookie,如果 Cookie 被禁用,那么 session 也將失效。
(1)瀏覽器端第一次發送請求到服務器端
(2)服務器端創建Cookie,該Cookie中包含用戶的信息,然后將該Cookie發送到瀏覽器端
(3)瀏覽器端再次訪問服務器端時會攜帶服務器端創建的Cookie
(4)服務器端通過Cookie中攜帶的數據區分不同的用戶
(1)瀏覽器端第一次發送請求到服務器端,服務器端創建一個Session,同時會創建一個特殊的Cookie(name為JSESSIONID的固定值,value為session對象的ID),然后將該Cookie發送至瀏覽器端
(2)瀏覽器端發送第N(N>1)次請求到服務器端,瀏覽器端訪問服務器端時就會攜帶該name為JSESSIONID的Cookie對象
(3)服務器端根據name為JSESSIONID的Cookie的value(sessionId),去查詢Session對象,從而區分不同用戶。
第一種,在每次請求中都攜帶一個 SessionID 的參數放入URL
第二種,Token 機制。Token 的意思是“令牌”,是服務端生成的一串字符串,作為客戶端進行請求的一個標識。隨機且無狀態,用戶信息都被加密到token中,服務器收到token后解密就可知道是哪個用戶。需要開發者手動添加。
Cookie在生成時就會被指定一個Expire值,這就是Cookie的生存周期,在這個周期內Cookie有效,超出周期Cookie就會被清除。有些頁面將Cookie的生存周期設置為“0”或負值,這樣在關閉瀏覽器時,就馬上清除Cookie,不會記錄用戶信息,更加安全。
①存在的位置:
Cookie存在于客戶端,臨時文件夾中; Session存在于服務器的內存中,一個Session域對象為一個用戶瀏覽器服務
②安全性
Cookie是以明文的方式存放在客戶端的,安全性低,可以通過一個加密算法進行加密后存放; Session存放于服務器的內存中,所以安全性好
③網絡傳輸量
Cookie會傳遞消息給服務器; Session本身存放于服務器,不會有傳送流量
④生命周期(以20分鐘為例)
Cookie的生命周期是累計的,從創建時,就開始計時,20分鐘后,Cookie生命周期結束;
session的生命周期是間隔的,從創建時,開始計時如在20分鐘,沒有訪問Session,那么Session生命周期被銷毀。但是,如果在20分鐘內(如在第19分鐘時)訪問過Session,那么,將重新計算Session的生命周期。關機會造成Session生命周期的結束,但是對Cookie沒有影響
⑤訪問范圍
Cookie為多個用戶瀏覽器共享; Session為一個用戶瀏覽器獨享