Session和Cookie

HTTP是一種無狀態(tài)的協(xié)議,為了分辨鏈接是誰發(fā)起的柱衔,需自己去解決這個(gè)問題言沐。不然有些情況下即使是同一個(gè)網(wǎng)站每打開一個(gè)頁面也都要登錄一下望浩。而Session和Cookie就是為解決這個(gè)問題而提出來的兩個(gè)機(jī)制次酌。

Cookie

在程序中恨课,會話跟蹤是很重要的事情舆乔。理論上岳服,一個(gè)用戶的所有請求操作都應(yīng)該屬于同一個(gè)會話,而另一個(gè)用戶的所有請求操作則應(yīng)該屬于另一個(gè)會話希俩,二者不能混淆吊宋。例如,用戶A在超市購買的任何商品都應(yīng)該放在A的購物車內(nèi)颜武,不論是用戶A什么時(shí)間購買的璃搜,這都是屬于同一個(gè)會話的,不能放入用戶B或用戶C的購物車內(nèi)鳞上,這不屬于同一個(gè)會話这吻。

而Web應(yīng)用程序是使用HTTP協(xié)議傳輸數(shù)據(jù)的。HTTP協(xié)議是無狀態(tài)的協(xié)議篙议。一旦數(shù)據(jù)交換完畢唾糯,客戶端與服務(wù)器端的連接就會關(guān)閉,再次交換數(shù)據(jù)需要建立新的連接鬼贱。這就意味著服務(wù)器無法從連接上跟蹤會話移怯。即用戶A購買了一件商品放入購物車內(nèi),當(dāng)再次購買商品時(shí)服務(wù)器已經(jīng)無法判斷該購買行為是屬于用戶A的會話還是用戶B的會話了这难。要跟蹤該會話舟误,必須引入一種機(jī)制。

Cookie技術(shù)是客戶端的解決方案姻乓,Cookie就是由服務(wù)器發(fā)給客戶端的特殊信息嵌溢,而這些信息以文本文件的方式存放在客戶端,然后客戶端每次向服務(wù)器發(fā)送請求的時(shí)候都會帶上這些特殊的信息蹋岩。讓我們說得更具體一些:當(dāng)用戶使用瀏覽器訪問一個(gè)支持Cookie的網(wǎng)站的時(shí)候堵腹,用戶會提供包括用戶名在內(nèi)的個(gè)人信息并且提交至服務(wù)器;接著星澳,服務(wù)器在向客戶端回傳相應(yīng)的超文本的同時(shí)也會發(fā)回這些個(gè)人信息疚顷,當(dāng)然這些信息并不是存放在HTTP響應(yīng)體(Response Body)中的,而是存放于HTTP響應(yīng)頭(Response Header);當(dāng)客戶端瀏覽器接收到來自服務(wù)器的響應(yīng)之后腿堤,瀏覽器會將這些信息存放在一個(gè)統(tǒng)一的位置阀坏,對于Windows操作系統(tǒng)而言,我們可以從: [系統(tǒng)盤]:\Documents and Settings[用戶名]\Cookies目錄中找到存儲的Cookie笆檀;自此忌堂,客戶端再向服務(wù)器發(fā)送請求的時(shí)候,都會把相應(yīng)的Cookie再次發(fā)回至服務(wù)器酗洒。而這次士修,Cookie信息則存放在HTTP請求頭(Request Header)了。有了Cookie這樣的技術(shù)實(shí)現(xiàn)樱衷,服務(wù)器在接收到來自客戶端瀏覽器的請求之后棋嘲,就能夠通過分析存放于請求頭的Cookie得到客戶端特有的信息,從而動(dòng)態(tài)生成與該客戶端相對應(yīng)的內(nèi)容矩桂。通常沸移,我們可以從很多網(wǎng)站的登錄界面中看到“請記住我”這樣的選項(xiàng),如果你勾選了它之后再登錄侄榴,那么在下一次訪問該網(wǎng)站的時(shí)候就不需要進(jìn)行重復(fù)而繁瑣的登錄動(dòng)作了雹锣,而這個(gè)功能就是通過Cookie實(shí)現(xiàn)的。

Cookie就是這樣的一種機(jī)制癞蚕。它可以彌補(bǔ)HTTP協(xié)議無狀態(tài)的不足蕊爵。在Session出現(xiàn)之前,基本上所有的網(wǎng)站都采用Cookie來跟蹤會話桦山。

如果你把Cookies看成為http協(xié)議的一個(gè)擴(kuò)展的話攒射,理解起來就容易的多了,其實(shí)本質(zhì)上cookies就是http的一個(gè)擴(kuò)展度苔。有兩個(gè)http頭部是專門負(fù)責(zé)設(shè)置以及發(fā)送cookie的,它們分別是Set-Cookie以及Cookie匆篓。當(dāng)服務(wù)器返回給客戶端一個(gè)http響應(yīng)信息時(shí),其中如果包含Set-Cookie這個(gè)頭部時(shí)寇窑,意思就是指示客戶端建立一個(gè)cookie鸦概,并且在后續(xù)的http請求中自動(dòng)發(fā)送這個(gè)cookie到服務(wù)器端,直到這個(gè)cookie過期甩骏。如果cookie的生存時(shí)間是整個(gè)會話期間的話窗市,那么瀏覽器會將cookie保存在內(nèi)存中,瀏覽器關(guān)閉時(shí)就會自動(dòng)清除這個(gè)cookie饮笛。另外一種情況就是保存在客戶端的硬盤中咨察,瀏覽器關(guān)閉的話,該cookie也不會被清除福青,下次打開瀏覽器訪問對應(yīng)網(wǎng)站時(shí)摄狱,這個(gè)cookie就會自動(dòng)再次發(fā)送到服務(wù)器端脓诡。一個(gè)cookie的設(shè)置以及發(fā)送過程分為以下四步:


Cookie設(shè)置

但是由于cookie 是存在用戶端,而且它本身存儲的尺寸大小也有限媒役,最關(guān)鍵是用戶可以是可見的祝谚,并可以隨意的修改,很不安全酣衷。那如何又要安全交惯,又可以方便的全局讀取信息呢?于是穿仪,這個(gè)時(shí)候席爽,一種新的存儲會話機(jī)制:session 誕生了。

Session

當(dāng)訪問服務(wù)器否個(gè)網(wǎng)頁的時(shí)候啊片,會在服務(wù)器端的內(nèi)存里開辟一塊內(nèi)存只锻,這塊內(nèi)存就叫做session,而這個(gè)內(nèi)存是跟瀏覽器關(guān)聯(lián)在一起的钠龙。這個(gè)瀏覽器指的是瀏覽器窗口炬藤,或者是瀏覽器的子窗口御铃,意思就是碴里,只允許當(dāng)前這個(gè)session對應(yīng)的瀏覽器訪問,就算是在同一個(gè)機(jī)器上新啟的瀏覽器也是無法訪問的上真。而另外一個(gè)瀏覽器也需要記錄session的話咬腋,就會再啟一個(gè)屬于自己的session

當(dāng)訪問一個(gè)頁面的時(shí)候給瀏覽器創(chuàng)建一個(gè)獨(dú)一無二的號碼,也給同時(shí)創(chuàng)建的session賦予同樣的號碼睡互。這樣就可以在打開同一個(gè)網(wǎng)站的第二個(gè)頁面時(shí)獲取到第一個(gè)頁面中session保留下來的對應(yīng)信息(理解:當(dāng)訪問第二個(gè)頁面時(shí)將號碼同時(shí)傳遞到第二個(gè)頁面根竿。找到對應(yīng)的session。)就珠。這個(gè)號碼也叫sessionID寇壳,session的ID號碼,session的獨(dú)一無二號碼妻怎。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末壳炎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子逼侦,更是在濱河造成了極大的恐慌匿辩,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榛丢,死亡現(xiàn)場離奇詭異铲球,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)晰赞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門稼病,熙熙樓的掌柜王于貴愁眉苦臉地迎上來选侨,“玉大人,你說我怎么就攤上這事然走∏炙祝” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵丰刊,是天一觀的道長隘谣。 經(jīng)常有香客問我,道長啄巧,這世上最難降的妖魔是什么寻歧? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮秩仆,結(jié)果婚禮上码泛,老公的妹妹穿的比我還像新娘。我一直安慰自己澄耍,他們只是感情好噪珊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著齐莲,像睡著了一般痢站。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上选酗,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天阵难,我揣著相機(jī)與錄音导街,去河邊找鬼洛巢。 笑死郊酒,一個(gè)胖子當(dāng)著我的面吹牛右莱,可吹牛的內(nèi)容都是我干的缚够。 我是一名探鬼主播窗声,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼榨惠,長吁一口氣:“原來是場噩夢啊……” “哼捺癞!你這毒婦竟也來了闷祥?” 一聲冷哼從身側(cè)響起娱颊,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜀踏,沒想到半個(gè)月后维蒙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡果覆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年颅痊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片局待。...
    茶點(diǎn)故事閱讀 40,127評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡斑响,死狀恐怖菱属,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舰罚,我是刑警寧澤纽门,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站营罢,受9級特大地震影響赏陵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜饲漾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一蝙搔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧考传,春花似錦吃型、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至泉褐,卻和暖如春赐写,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兴枯。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工血淌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矩欠,地道東北人财剖。 一個(gè)月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像癌淮,于是被迫代替她去往敵國和親躺坟。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評論 2 355