會話管理
在http協(xié)議中,我們了解到了,http每次請求都是握手/揮手,第二次和第一次請求時沒有任何關(guān)聯(lián)的,屬于無狀態(tài)協(xié)議,那么問題來了,既然http是無狀態(tài)協(xié)議,那服務(wù)器是怎么區(qū)分不同的用戶的呢?,這就是會話了
基礎(chǔ)講解
服務(wù)器能區(qū)分用戶的原理主要就是在于會話,每次發(fā)起http請求時,都附加上一條身份識別數(shù)據(jù),例如下面這個http請求頭:
GET / HTTP/1.1
Host: www.jrrswxmm.cn
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4094.1 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.8
Cookie: Hm_lvt_4c8d895ff3b25bddb6fa4185c8651cc3=1541986142,1542074627,1542158990,1542252497; Hm_lpvt_4c8d895ff3b25bddb6fa4185c8651cc3=1542252498
拋開http本身需要的數(shù)據(jù),我們講解下:
User-Agent: 用戶端信息,瀏覽器的各種信息
Cookie: cookie會話
服務(wù)端可以通過User-Agent獲得用戶的瀏覽器信息,可以通過cookie獲取自定義的信息
所以我們可以:
- 用戶A第一次進入,沒有附帶cookie
- 服務(wù)端記錄這個用戶,響應頭增加一個set_cookie:id=1的cookie
- 瀏覽器獲得響應頭,解析到set_cookie動作,把id=1存進cookie
- 第二次請求服務(wù)端,帶上id=1的cookie,服務(wù)端就可以知道:這次請求時用戶A請求的
- 同理,用戶B第一次進入,服務(wù)端響應set_cookie:id=2
- ...
可以看出,只要用戶端每次請求,跟服務(wù)端約定好一個參數(shù)作為用戶標識,服務(wù)端就可以通過這個標識區(qū)分不同的用戶了