需要解決的問題:HTTP是無狀態(tài)的協(xié)議。當(dāng)服務(wù)器無法識別用戶的狀態(tài)。服務(wù)器無法知道兩個請求是否來自于同一個瀏覽器该镣。
應(yīng)用場景:購物車。
機(jī)制:Session响谓。開發(fā)者為了實現(xiàn)中斷和繼續(xù)等操作损合,將 user agent 和 server 之間一對一的交互,抽象為“會話”歌粥。
原理:把用戶的數(shù)據(jù)記錄在session中塌忽,每個session在服務(wù)端都有一個唯一標(biāo)識id拍埠。
識別:用Cookie技術(shù)來實現(xiàn)session失驶。每次HTTP請求的時候,客戶端都會發(fā)送相應(yīng)的Cookie信息到服務(wù)端枣购。實際上大多數(shù)的應(yīng)用都是用 Cookie 來實現(xiàn)Session跟蹤的嬉探。第一次創(chuàng)建Session的時候,服務(wù)端會在HTTP協(xié)議中告訴客戶端棉圈,需要在 Cookie 里面記錄一個Session ID涩堤,以后每次請求把這個會話ID發(fā)送到服務(wù)器,這樣服務(wù)器就能識別用戶了分瘾。
Cookie最常用于記錄用戶的賬戶信息和操作記錄胎围。所以泄露cookie 會帶來個人帳號與隱私泄露的風(fēng)險, 這就是為什么你搜索一個關(guān)鍵字,會在其他網(wǎng)站上看到推薦廣告的原因白魂。
如果禁用cookie怎么辦呢汽纤?可以使用URL重寫的技術(shù)來進(jìn)行會話跟蹤,即每次HTTP交互福荸,URL后面都會被附加上一個諸如 sid=xxxxx 這樣的參數(shù)蕴坪,服務(wù)端據(jù)此來識別用戶。
存儲:在大型的網(wǎng)站敬锐,一般會有專門的Session服務(wù)器集群背传。session常見存儲在緩存中,cookie存儲到客戶端台夺,一般是瀏覽器的本地文件中径玖。
HTTP Headers:Web 服務(wù)器通過發(fā)送一個稱為 Set-Cookie 的 HTTP 消息頭來創(chuàng)建一個 cookie。格式如下(中括號中的部分是可選的):
Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]
cookie 的值被存儲在名為 Cookie 的 HTTP 消息頭中颤介。如果請求中包含多個 cookie挺狰,它們將會被分號和空格分開,例如:
Cookie: value1; value2; name1=value1