服務(wù)器哥的session故事

? ? ? ?首先什么是session吊圾,字面意思是會(huì)話控制挥等。個(gè)人理解就是就是一套可以識(shí)別用戶的系統(tǒng)蝶念,為什么需要一套叫做session的東西來識(shí)別用戶呢抛腕?這就得從http協(xié)議說起,http協(xié)議是基于TCP/IP協(xié)議的一層封裝(為了讓大家都容易理解一些媒殉,我都以直白的方式來說担敌,盡量不扯太底層的東西)。用戶在訪問一個(gè)網(wǎng)站的時(shí)候廷蓉,每一次請(qǐng)求頁面之后都是斷開連接的全封,既然是斷開連接的马昙,那么我下一次訪問的時(shí)候服務(wù)器哥怎么知道是我再一次訪問呢?最簡(jiǎn)單的方式刹悴,第一次我給一個(gè)憑證你行楞,這個(gè)憑證記錄著一些與身份相關(guān)的信息,第二次你訪問的時(shí)候給我看這個(gè)憑證土匀,我就知道你是之前的那個(gè)用戶了子房。

憑證的交付

? ? ? ?既然我們知道用`憑證`這一個(gè)辦法可以識(shí)別用戶,那么好了就轧,我們就要想辦法給用戶一個(gè)憑證证杭。怎么給也是一個(gè)技術(shù)活,一個(gè)最簡(jiǎn)單的辦法:把憑證信息都放在cookie就行了妒御,反正用戶每次訪問都會(huì)帶著cookie訪問的解愤。

制作憑證

? ? ? ? 既然知道如何給用戶憑證了,那么服務(wù)器哥就很開心啦(可以識(shí)別用戶咯)乎莉,趕緊就開始制作憑證送讲,一開始就直接把用戶信息直接放到cookie里面(姓名:小明,性別:男惋啃,年齡不詳)李茫,這個(gè)時(shí)候把憑證給了小明,然后每一次小明都拿這個(gè)憑證給服務(wù)器哥看肥橙,然后就可以愉快的玩耍咯秸侣。

憑證的信任危機(jī)

? ? ? ? 一開始服務(wù)器哥非常相信用戶存筏,沒想到有一天,某個(gè)用戶竟然在憑證上偽造了內(nèi)容味榛,讓服務(wù)器哥誤認(rèn)為他是某個(gè)用戶(這個(gè)時(shí)候憑證是明文椭坚,該起來非常方便),然后被偽造的那個(gè)用戶的信息泄漏了搏色。善茎。。信息無價(jià)吶频轿,服務(wù)器哥怎么可能讓這事情蔓延下去垂涯,所以服務(wù)器哥立馬把憑證內(nèi)容加密了(這個(gè)加密是可逆加密),這個(gè)時(shí)候用戶拿到的是一堆看不懂的數(shù)據(jù)航邢,不過服務(wù)器哥自己可以解密耕赘,用戶也無法偽造憑證,這樣子就解決了一下憑證的信任危機(jī)膳殷。(python的flask框架就是這樣子處理的)

憑證內(nèi)容保密問題

? ? ? ?雖然服務(wù)器哥加密了憑證的內(nèi)容操骡,然而畢竟是可以解密的,假如有一些信息不希望用戶看到的,但是為了方便又想寫在憑證上面怎么辦呢册招。這個(gè)時(shí)候岔激,服務(wù)器哥想到給用戶的憑證只記錄一個(gè)唯一的編碼,然后在自己這里放著用戶憑證的具體數(shù)據(jù)是掰,然后為這個(gè)數(shù)據(jù)關(guān)聯(lián)編碼就好了虑鼎。

憑證保存問題

? ? ? ? ?既然憑證信息放在服務(wù)器哥這里,那么又該怎么存放呢冀惭。服務(wù)器哥想了幾套解決方案出來:

(1)基于文件的存儲(chǔ)

(2)基于數(shù)據(jù)庫的存儲(chǔ)

(3)基于內(nèi)存的存儲(chǔ)

(4)基于memcached的存儲(chǔ)

(5)基于redis的存儲(chǔ)

? ? ? ?基于文件的存儲(chǔ)震叙,我們只需要簡(jiǎn)單的以用戶拿到的唯一編碼作為文件名就好,具體信息放在文件里面(我之前寫的paas系統(tǒng)就是用了這種方案:https://github.com/yubang/app/blob/master/middle/session.py)散休。這種方案有幾個(gè)缺點(diǎn)媒楼,首先磁盤讀寫速度并不快,然后憑證的唯一編碼有過期時(shí)間戚丸,隨著時(shí)間的流失划址,廢棄的文件也會(huì)越來越多,所以還要定時(shí)刪除過期的文件限府。并且在多臺(tái)服務(wù)器的時(shí)候夺颤,還要保持每臺(tái)服務(wù)器都能讀取到這些文件。

? ? ? ?基于數(shù)據(jù)庫的存儲(chǔ)胁勺,這種方案跟基于文件差不多世澜,比文件的優(yōu)點(diǎn)是有多臺(tái)服務(wù)器的時(shí)候,只要連著一臺(tái)數(shù)據(jù)庫就可以保證讀取到這些數(shù)據(jù)署穗。

? ? ? ?基于內(nèi)存的存儲(chǔ)這方案主要優(yōu)點(diǎn)是讀寫數(shù)據(jù)比較快寥裂,然而內(nèi)存斷電后數(shù)據(jù)都沒了,并且程序之間內(nèi)存獨(dú)立了(不過linux系統(tǒng)有一個(gè)/dev/shm的目錄是映射到內(nèi)存的)案疲,并且多服務(wù)器時(shí)候讀取數(shù)據(jù)也是一個(gè)問題封恰,過期數(shù)據(jù)也要手動(dòng)清除。

? ? ? ?基于memcached這種方案其實(shí)跟內(nèi)存差不多褐啡,然而memcached幫我們解決了除了斷電數(shù)據(jù)丟失之外的大部分問題诺舔,在數(shù)據(jù)超過一定量時(shí)候刪除一些數(shù)據(jù),支持多臺(tái)服務(wù)器來讀取數(shù)據(jù)备畦。

? ? ? ? 基于redis這種方案其實(shí)是擁有了memcached的優(yōu)點(diǎn)低飒,并且斷電后數(shù)據(jù)還保存數(shù)據(jù)(哈哈,服務(wù)器哥再也不擔(dān)心斷電咯)

憑證交付難題

? ? ? ? 技術(shù)路總是困難重重的萍恕,服務(wù)器哥好不容易依靠cookie交付憑證逸嘀,解決了各種安全問題。突然有一天允粤,一個(gè)用戶說我不使用cookie的(服務(wù)器哥哭暈了)崭倘,用戶又不能得罪的翼岁,怎么辦呢?左想右想(技術(shù)總有替代方案的)司光,終于找到幾個(gè)辦法:

(1)每次請(qǐng)求都在url附帶上唯一編碼(哈哈琅坡,好辦法)【類似于我們平時(shí)調(diào)用第三方API】

(2)每次訪問在headers附帶上唯一編碼(也是辦法)

故事結(jié)局

? ? ? ?不知不覺這個(gè)故事就說完了,最后就是服務(wù)器哥利用一張憑證成功記住了用戶残家。

? ? ? ?總的來說榆俺,session就是給每一個(gè)用戶一個(gè)隨機(jī)的唯一的編號(hào),交付途徑可以是cookie坞淮,url或者h(yuǎn)eaders茴晋。而通過這個(gè)唯一的編碼,映射到服務(wù)器存儲(chǔ)的具體信息回窘,保存方案各種各樣有磁盤有內(nèi)存诺擅。


題外話

技術(shù)是無味的,代碼只是一堆字符啡直,然而代碼制作的產(chǎn)品卻是令人振奮的烁涌,我只想以最簡(jiǎn)單有趣的話解說最無味的底層技術(shù),如果喜歡的話酒觅,點(diǎn)贊是對(duì)我最好的支持撮执。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市舷丹,隨后出現(xiàn)的幾起案子抒钱,更是在濱河造成了極大的恐慌,老刑警劉巖颜凯,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件继效,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡装获,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門厉颤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來穴豫,“玉大人,你說我怎么就攤上這事逼友【啵” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵帜乞,是天一觀的道長司抱。 經(jīng)常有香客問我,道長黎烈,這世上最難降的妖魔是什么习柠? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任匀谣,我火速辦了婚禮,結(jié)果婚禮上资溃,老公的妹妹穿的比我還像新娘武翎。我一直安慰自己,他們只是感情好溶锭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布宝恶。 她就那樣靜靜地躺著,像睡著了一般趴捅。 火紅的嫁衣襯著肌膚如雪垫毙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天拱绑,我揣著相機(jī)與錄音综芥,去河邊找鬼。 笑死欺栗,一個(gè)胖子當(dāng)著我的面吹牛毫痕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播迟几,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼消请,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了类腮?” 一聲冷哼從身側(cè)響起臊泰,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚜枢,沒想到半個(gè)月后缸逃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厂抽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年需频,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筷凤。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昭殉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出藐守,到底是詐尸還是另有隱情挪丢,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布卢厂,位于F島的核電站乾蓬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏慎恒。R本人自食惡果不足惜任内,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一撵渡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧族奢,春花似錦姥闭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至廊敌,卻和暖如春铜跑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背骡澈。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工锅纺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肋殴。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓囤锉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親护锤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子官地,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容