日常使用的超文本傳輸協(xié)議HTTP是一個無狀態(tài)的協(xié)議,所以對于客戶端的每一次請求,服務(wù)器總認為這是一次完全地全新的請求,但是有些時候,為了提高用戶的互聯(lián)網(wǎng)體驗,工程師們提出使用cookie和session來滿足用戶對于狀態(tài)保存的需求。
cookie 是一小段文本數(shù)據(jù),存放在客戶端(瀏覽器之中),用戶可以通過瀏覽器設(shè)置取消cookie的功能,每次客戶端發(fā)出請求的時候,cookie連同http頭一起發(fā)送給服務(wù)器,服務(wù)器只能讀取是其設(shè)置的cookie,而不能讀取其他服務(wù)器設(shè)置的cookie,cookie里保存了用戶上次訪問網(wǎng)站的信息,當(dāng)關(guān)閉瀏覽器的時候,cookie并不會從客戶端刪除,而是根據(jù)它的過期時間來決定其存在。
session 也是一小段數(shù)據(jù)稱為會話變量,它存放在服務(wù)器端,用于保存客戶端和服務(wù)器端之間的連接狀態(tài),也許有人會想“服務(wù)器是如何識別哪個客戶端發(fā)來的請求呢?”所以針對每一個session,都有一個唯一的ID來標(biāo)識,這個sessionID默認以cookie的形式存放在客戶端中,當(dāng)客戶端發(fā)起請求的時候,服務(wù)器讀取此cookie抽取sessionID信息,以此判斷請求來源。
N.B.:有人出現(xiàn)此種誤解,只要每次關(guān)閉瀏覽器,則session信息便從服務(wù)器端刪除,這個說法是需要糾正的,因為混淆了session(persistant)和session cookie(temporary)的概念,一般來說,session從服務(wù)器端刪除是需要客戶端發(fā)來的指令,即用戶點擊Log Out按鈕,如果用戶沒有發(fā)來注銷指令,服務(wù)器是不會自動刪除session的,而是一直留在服務(wù)器端。至于之前所說的關(guān)閉即刪除,那是針對的session cookie,所謂session cookie就是一個臨時存儲,關(guān)閉客戶端則此session便被刪除。
|