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