理解cookie&session 分別是什么瞎颗?

前言

  • HTTP是一種無(wú)狀態(tài)協(xié)議,為了分別鏈接是誰(shuí)發(fā)起的捌议,需自己去解決這個(gè)問(wèn)題哼拔。不然有些情況下即使是同一個(gè)網(wǎng)站每打開(kāi)一個(gè)網(wǎng)頁(yè),也都要登錄一下瓣颅。而Session和Cookie就是為解決這個(gè)問(wèn)題而提出來(lái)的兩個(gè)機(jī)制倦逐。

應(yīng)用場(chǎng)景

  • 登錄網(wǎng)站,今輸入用戶名和密碼登錄了宫补,第二天再打開(kāi)很多情況下就直接打開(kāi)了檬姥。這個(gè)時(shí)候用到的一個(gè)機(jī)制就是cookie曾我。
  • session,一個(gè)場(chǎng)景是購(gòu)物車,添加了商品之后客戶端處可以知道添加了哪些商品健民,而服務(wù)器端如何判別呢抒巢?所以也需要存儲(chǔ)一些信息就用到了session.
  1. Cookie
  • 通俗的講,是訪問(wèn)某些網(wǎng)站后在本地存儲(chǔ)的一些網(wǎng)站相關(guān)信息秉犹,下次訪問(wèn)時(shí)減少一些步驟蛉谜。更準(zhǔn)確的一些說(shuō)法是:Cookie是服務(wù)器在本地機(jī)器上存儲(chǔ)的小段文本,并隨每一個(gè)請(qǐng)求發(fā)送至同一服務(wù)器崇堵,是在客戶端保持狀態(tài)的方案型诚。

  • Cookie的主要內(nèi)容包括,名字筑辨,值俺驶,過(guò)期時(shí)間幸逆,路徑和域棍辕。使用Fiddler抓包就可以看見(jiàn),比方說(shuō)还绘,我們打開(kāi)百度的某個(gè)網(wǎng)站可以看到Headers包括Cookie,如下:


    image.png
  • key /value 形式的楚昭。過(guò)期時(shí)間可以設(shè)置,如不設(shè)拍顷,則瀏覽器關(guān)掉就消失了抚太,存儲(chǔ)在內(nèi)存當(dāng)中,否則就按照設(shè)置的時(shí)間才存儲(chǔ)在硬盤(pán)上的昔案,過(guò)期后自動(dòng)清除尿贫,比方說(shuō)開(kāi)關(guān)機(jī)關(guān)閉再打開(kāi)瀏覽器后他都還會(huì)存在,前者稱之為Session cookie ,又叫transient cookie,后者稱之Persistent cookie 又叫 permenent cookie踏揣。路徑和域就是對(duì)應(yīng)的域名庆亡,a網(wǎng)站的cookie自然不能給b用。

  • 一般瀏覽器存儲(chǔ)cookie 最大容量為4k捞稿,所以大量數(shù)據(jù)不要存到cookie又谋。

2.Session

  • 存在服務(wù)器的一種用來(lái)存放用戶數(shù)據(jù)的類Hash Table結(jié)構(gòu)
  • 瀏覽器第一次發(fā)送請(qǐng)求時(shí),服務(wù)器自動(dòng)生成了一HashTable和一Session ID來(lái)唯一標(biāo)識(shí)這個(gè)HashTable娱局,并將其通過(guò)響應(yīng)發(fā)送到瀏覽器彰亥。瀏覽器第二次發(fā)送請(qǐng)求會(huì)將前一次服務(wù)器響應(yīng)中的Session ID放在請(qǐng)求中一并發(fā)送到服務(wù)器上,服務(wù)器從請(qǐng)求中提取出Session ID衰齐,并和保存的所有Session ID進(jìn)行對(duì)比任斋,找到這個(gè)用戶對(duì)應(yīng)的HashTable。
  • 一般這個(gè)值會(huì)有個(gè)時(shí)間限制耻涛,超時(shí)后毀掉這個(gè)值废酷,默認(rèn)30分鐘穴翩。
  • 當(dāng)用戶在應(yīng)用程序的 Web頁(yè)間跳轉(zhuǎn)時(shí),存儲(chǔ)在 Session 對(duì)象中的變量不會(huì)丟失而是在整個(gè)用戶會(huì)話中一直存在下去锦积。
  • Session的實(shí)現(xiàn)方式和Cookie有一定關(guān)系芒帕。建立一個(gè)連接就生成一個(gè)session id,打開(kāi)幾個(gè)頁(yè)面就好幾個(gè)了丰介,這里就用到了Cookie背蟆,把session id存在Cookie中,每次訪問(wèn)的時(shí)候?qū)ession id帶過(guò)去就可以識(shí)別了.

區(qū)別

  • 存儲(chǔ)數(shù)據(jù)量方面:session能夠存儲(chǔ)任意JAVA對(duì)象哮幢,Cookie只能存儲(chǔ)String類型的對(duì)象带膀。
  • 一個(gè)在客戶端一個(gè)在服務(wù)端,因?yàn)镃ookie在客戶端橙垢,所以可以編輯偽造垛叨,不是十分安全。
  • Session過(guò)多時(shí)會(huì)消耗服務(wù)器資源柜某,大型網(wǎng)站會(huì)有專門(mén)的Session服務(wù)器嗽元,Cookie存在客戶端沒(méi)問(wèn)題。
  • 域的支持范圍不一樣喂击,比方說(shuō)a.com的cookie在a.com下都能用剂癌,而www.a.com的session在api.a.com下都不能用,解決這個(gè)問(wèn)題的辦法是JSONP或跨域資源共享翰绊。

session多服務(wù)器間共享

  1. 服務(wù)器實(shí)現(xiàn)的 session 復(fù)制或 session 共享佩谷,如 webSphere或 JBOSS 在搭集群時(shí)配置實(shí)現(xiàn) session 復(fù)制或 session 共享.致命缺點(diǎn):不好擴(kuò)展和移植。
  2. 利用成熟技術(shù)做session復(fù)制监嗜,如12306使用的gemfire谐檀,如常見(jiàn)內(nèi)存數(shù)據(jù)庫(kù)redis或memorycache,雖較普適但依賴第三方.
  3. 將 session維護(hù)在客戶端裁奇,利用 cookie桐猬,但客戶端存在風(fēng)險(xiǎn)數(shù)據(jù)不安全,且可以存放的數(shù)據(jù)量較小框喳,所以將session 維護(hù)在客戶端還要對(duì) session 中的信息加密课幕。
  4. 第二種方案和第三種方案的合體,可用gemfire實(shí)現(xiàn) session 復(fù)制共享五垮,還可將session 維護(hù)在 redis中實(shí)現(xiàn) session 共享乍惊,同時(shí)可將 session 維護(hù)在客戶端的cookie 中,但前提是數(shù)據(jù)要加密放仗。

這三種方式可迅速切換润绎,而不影響應(yīng)用正常執(zhí)行。在實(shí)踐中,首選 gemfire 或者 redis 作為 session 共享的載體莉撇,一旦 session 不穩(wěn)定出現(xiàn)問(wèn)題的時(shí)候呢蛤,可以緊急切換 cookie 維護(hù) session 作為備用,不影響應(yīng)用提供服務(wù)

單點(diǎn)登錄中棍郎,cookie 被禁用了怎么辦其障?(一點(diǎn)登陸,子網(wǎng)站其他系統(tǒng)不用再登陸)

  • 單點(diǎn)登錄的原理是后端生成一個(gè) session ID涂佃,設(shè)置到 cookie励翼,后面所有請(qǐng)求瀏覽器都會(huì)帶上cookie,然后服務(wù)端從cookie獲取 session ID辜荠,查詢到用戶信息汽抚。
  • 所以,保持登錄的關(guān)鍵不是cookie伯病,而是通過(guò)cookie 保存和傳輸?shù)?session ID造烁,本質(zhì)是能獲取用戶信息的數(shù)據(jù)。
  • 除了cookie午笛,還常用 HTTP 請(qǐng)求頭來(lái)傳輸惭蟋。但這個(gè)請(qǐng)求頭瀏覽器不會(huì)像cookie一樣自動(dòng)攜帶,需手工處理
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末季研,一起剝皮案震驚了整個(gè)濱河市敞葛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌与涡,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件持偏,死亡現(xiàn)場(chǎng)離奇詭異驼卖,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鸿秆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)酌畜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人卿叽,你說(shuō)我怎么就攤上這事桥胞。” “怎么了考婴?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵贩虾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我沥阱,道長(zhǎng)缎罢,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮策精,結(jié)果婚禮上舰始,老公的妹妹穿的比我還像新娘。我一直安慰自己咽袜,他們只是感情好丸卷,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著询刹,像睡著了一般及老。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上范抓,一...
    開(kāi)封第一講書(shū)人閱讀 52,736評(píng)論 1 312
  • 那天骄恶,我揣著相機(jī)與錄音,去河邊找鬼匕垫。 笑死僧鲁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的象泵。 我是一名探鬼主播寞秃,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼偶惠!你這毒婦竟也來(lái)了春寿?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤忽孽,失蹤者是張志新(化名)和其女友劉穎绑改,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體兄一,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厘线,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了出革。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片造壮。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖骂束,靈堂內(nèi)的尸體忽然破棺而出耳璧,到底是詐尸還是另有隱情,我是刑警寧澤展箱,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布旨枯,位于F島的核電站,受9級(jí)特大地震影響析藕,放射性物質(zhì)發(fā)生泄漏召廷。R本人自食惡果不足惜凳厢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望竞慢。 院中可真熱鬧先紫,春花似錦、人聲如沸筹煮。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)败潦。三九已至本冲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間劫扒,已是汗流浹背檬洞。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沟饥,地道東北人添怔。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像贤旷,于是被迫代替她去往敵國(guó)和親广料。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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

  • 目錄Cookie機(jī)制什么是CookieCookie的不可跨域名性Unicode編碼:保存中文BASE64編碼:保存...
    Tomatoro閱讀 16,958評(píng)論 7 186
  • 會(huì)話(Session)跟蹤是Web程序中常用的技術(shù)幼驶,用來(lái)跟蹤用戶的整個(gè)會(huì)話艾杏。常用的會(huì)話跟蹤技術(shù)是Cookie與Se...
    chinariver閱讀 5,627評(píng)論 1 49
  • 前些天從實(shí)驗(yàn)室了解到天池的FashionAI全球挑戰(zhàn)賽,題目和數(shù)據(jù)都挺有意思盅藻,于是花了點(diǎn)時(shí)間稍微嘗試了下购桑。目前比賽...
    宏倫工作室閱讀 1,689評(píng)論 2 2
  • 上周末花了兩個(gè)下午的時(shí)間看完了《軟技能-代碼之外的生存指南》,用了15個(gè)番茄鐘萧求。 簡(jiǎn)介 這本書(shū)的作者John So...
    coder_jerry閱讀 3,113評(píng)論 9 51
  • 《靠譜:頂尖咨詢師教你的工作基本功》 01.別在羅列信息了其兴,那不是客戶想要的 有一個(gè)咨詢師,當(dāng)時(shí)正負(fù)責(zé)調(diào)查一個(gè)客戶...
    孤獨(dú)魚(yú)大腦閱讀 199評(píng)論 0 0