session的實現(xiàn)原理
服務(wù)器會為每一個訪問服務(wù)器的用戶創(chuàng)建一個session對象播演,并且把session對象的id保存在本地cookie上恋沃,只要用戶再次訪問服務(wù)器時,帶著session的id哈垢,服務(wù)器就會匹配用戶在服務(wù)器上的session赖捌,根據(jù)session中的數(shù)據(jù),還原用戶上次的瀏覽狀態(tài)或提供其他人性化服務(wù)抚恒。
http是無狀態(tài)的通信協(xié)議咱台,客戶端(瀏覽器)每一次和服務(wù)器的通信,在服務(wù)器的眼里看俭驮,都是一次次孤立的事件回溺,這種模型顯然是無法滿足“定位”(區(qū)分)不同用戶請求的需求;
因為第一條的原因(有痛楚自然就會有需求混萝,有需求就會有解決方案)遗遵,服務(wù)器這邊需要“某種手段”來實現(xiàn)區(qū)分不同客戶端(瀏覽器)的需求;
需求模型就出來了:站在服務(wù)器的角度逸嘀,每時每刻都有非常多的http請求到來车要,但是這些請求,從協(xié)議的角度來看崭倘,服務(wù)器是無法區(qū)分它們分別歸屬于哪個客戶端(瀏覽器)翼岁,因此,我(服務(wù)器)必須主動給他們分類才行司光,怎么樣分類呢琅坡?
服務(wù)器用的是給客戶端(瀏覽器)發(fā)放一個標志信息(臨時身份證)來實現(xiàn)的,這個標志就是一個字符串(也就是session ID)
當用戶第一次登陸(或者訪問)的時候残家,服務(wù)器就會生成這樣的一個字符串榆俺,此時,session ID就誕生了(從無到有),服務(wù)器這邊自然會保存下來這個字符串了(不然服務(wù)器怎么能對客戶端進行持續(xù)服務(wù)茴晋?)
同時陪捷,服務(wù)器還會把這個字符串“回傳”(響應(yīng)客戶端/瀏覽器的HTTP請求)給客戶端(瀏覽器),目的就是告訴客戶端(瀏覽器):你丫現(xiàn)在有個臨時身份了诺擅,保存好(至于怎么樣保存市袖,各位就可以只有發(fā)揮想象了,當然cookie這玩意也是從這里才開始粉墨登場的)掀虎,下次再來訪問的時候記得對暗號(請求的時候凌盯,無論用什么方式,把這個字符串告訴服務(wù)器即可)烹玉!
推薦鏈接:
https://segmentfault.com/a/1190000007243675
http://www.cnblogs.com/xdp-gacl/p/3855702.html