會話機制
在多次HTTP連接間維護用戶與同一用戶發(fā)出的不同請求之間關(guān)聯(lián)的情況稱為維護一個會話(session)清酥。
例子:
A.瀏覽網(wǎng)站時,典型的會話場景
瀏覽視頻網(wǎng)站蕴侣,觀看視頻焰轻,昨天剛看了一段,今天打開網(wǎng)站昆雀,顯示你昨天觀看的歷史記錄辱志。
前兩天我在京東上逛了半天,看了一些手機狞膘,今天一打開網(wǎng)易揩懒,結(jié)果就推送一堆的手機廣告
淘寶購物,在瀏覽的時候客冈,將某個商品加入了購物車旭从,第二天再次登錄,購物車中還有商品
針對網(wǎng)站的某些頁面场仲,如果你沒有登錄和悦,就不能訪問
B.結(jié)合日常生活中的會話來理解
瀏覽網(wǎng)站時,如何維護其用戶狀態(tài)呢渠缕?(不同時刻鸽素、不同頁面)
HTTP協(xié)議本身是無狀態(tài)的。
需要亦鳞,維護(跟蹤)用戶的狀態(tài)馍忽,就需要使用某種機制---會話機制
有如下兩種會話技術(shù):
●Cookie
●Session
其中,cookie是基于瀏覽器端的會話技術(shù)燕差,session是基于服務(wù)端的會話技術(shù)遭笋。
session通常都會依賴cookie。
Cookie的格式
根據(jù)Netscape公司的規(guī)定徒探,Cookie格式如下:
Set-Cookie:name=value;expires=date;path=/directory;domain=.xx.com;secure
包含5個部分:
●name = value瓦呼,名值對,表示cookie的名稱测暗。必選
●expires = date央串,指定cookie失效的時間,如果沒有指定碗啄,則cookie不會寫入磁盤质和,只持續(xù)到當(dāng)前會話結(jié)束(通常就是關(guān)閉瀏覽器)。該屬性值DATE必須以特定的格式來書寫:星期幾稚字,DD-MM-YY HH:MM:SS GMT饲宿,GMT表示這是格林尼治時間厦酬。反之,不以這樣的格式來書寫瘫想,系統(tǒng)將無法識別弃锐。
●path = /directory,只有訪問/directory下面的頁面時殿托,cookie才被發(fā)送。如果指定了path剧蚣,但path與當(dāng)前訪問的url不符支竹,則此cookie被忽略。如果缺省鸠按,path的屬性值為web服務(wù)器傳給瀏覽器的資源的路徑名礼搁。
●domain=.xx.com,指定cookie被發(fā)送到哪臺計算機上目尖。正常情況下馒吴,cookie只被送回最初向用戶發(fā)送cookie的計算機。如果設(shè)置domain=xx.com瑟曲,則cookie會被發(fā)送到任何在xx.com域中的主機饮戳。如果domain為空,domain就設(shè)置為和提供cookie的服務(wù)器相同洞拨。如果domain不為空扯罐,但它的值和提供cookie的web服務(wù)器域名不符,這個cookie將被忽略烦衣。
●secrue歹河,如果設(shè)置了,則cookie只能通過ssl通道花吟,即https秸歧。
這充分的說明,cookie是作為響應(yīng)頭信息衅澈,從服務(wù)端發(fā)送到瀏覽器端的键菱。
使用原生的setHeader方法,來設(shè)置如下:
在network中查看如下:
小結(jié):cookie是作為響應(yīng)頭信息從服務(wù)端發(fā)送給瀏覽器端的矾麻,需要遵循cookie的格式纱耻。
任何一次http請求,瀏覽器都會自己攜帶cookie险耀,向服務(wù)端發(fā)送http請求弄喘。所以,我們只需要在服務(wù)端獲取cookie就可以了甩牺。
站在服務(wù)端蘑志,要獲取來自瀏覽端的信息,我們能想到的就是req對象了。**
(6).cookie基本原理
Cookie的傳輸過程急但,如下:
其中澎媒,從瀏覽器端-->服務(wù)器端,cookie是以請求頭的方式傳遞波桩。
從服務(wù)端-->瀏覽器端戒努,cookie是以響應(yīng)頭的方式來傳遞的。
使用network來分析這個過程:
第一次訪問镐躲,請求頭中储玫,沒有cookie信息
此時,服務(wù)端向瀏覽器端發(fā)送了一個cookie萤皂,如下:
后續(xù)的請求观游,在請求頭中泽篮,會攜帶cookie信息
所以實際情況如下