理解Cookie和Session的區(qū)別及使用

前言

? ? HTTP是一種無狀態(tài)的協(xié)議滤奈,為了分辨鏈接是誰發(fā)起的挪捕,需自己去解決這個問題槽地。不然有些情況下即使是同一個網(wǎng)站每打開一個頁面也都要登錄一下。而Session和Cookie就是為解決這個問題而提出來的兩個機制写妥。

應(yīng)用場景

? ? a,登錄網(wǎng)站,今輸入用戶名密碼登錄了审姓,第二天再打開很多情況下就直接打開了耳标。這個時候用到的一個機制就是cookie。

? ? b,session一個場景是購物車邑跪,添加了商品之后客戶端處可以知道添加了哪些商品次坡,而服務(wù)器端如何判別呢呼猪,所以也需要存儲一些信息就用到了session。

1.Cookie

? ? a,通俗講砸琅,是訪問某些網(wǎng)站后在本地存儲的一些網(wǎng)站相關(guān)信息宋距,下次訪問時減少一些步驟。更準(zhǔn)確的說法是:Cookies是服務(wù)器在本地機器上存儲的小段文本并隨每一個請求發(fā)送至同一服務(wù)器症脂,是在客戶端保持狀態(tài)的方案谚赎。

?? b, Cookie的主要內(nèi)容包括:名字,值诱篷,過期時間壶唤,路徑和域。使用Fiddler抓包就可以看見棕所,比方說我們打開百度的某個網(wǎng)站可以看到Headers包括Cookie闸盔,如下:

?? c, key, value形式。過期時間可設(shè)置的琳省,如不設(shè)迎吵,則瀏覽器關(guān)掉就消失了,存儲在內(nèi)存當(dāng)中针贬,否則就按設(shè)置的時間來存儲在硬盤上的击费,過期后自動清除,比方說開關(guān)機關(guān)閉再打開瀏覽器后他都會還存在桦他,前者稱之為Session cookie 又叫 transient cookie蔫巩,后者稱之為Persistent cookie 又叫 permenent cookie。路徑和域就是對應(yīng)的域名快压,a網(wǎng)站的cookie自然不能給b用批幌。

2.Session

a,存在服務(wù)器的一種用來存放用戶數(shù)據(jù)的類HashTable結(jié)構(gòu)。

b,瀏覽器第一次發(fā)送請求時嗓节,服務(wù)器自動生成了一HashTable和一Session ID來唯一標(biāo)識這個HashTable荧缘,并將其通過響應(yīng)發(fā)送到瀏覽器。瀏覽器第二次發(fā)送請求會將前一次服務(wù)器響應(yīng)中的Session ID放在請求中一并發(fā)送到服務(wù)器上拦宣,服務(wù)器從請求中提取出Session ID截粗,并和保存的所有Session ID進行對比,找到這個用戶對應(yīng)的HashTable鸵隧。

?c,一般這個值會有個時間限制绸罗,超時后毀掉這個值,默認(rèn)30分鐘豆瘫。

d,當(dāng)用戶在應(yīng)用程序的 Web頁間跳轉(zhuǎn)時珊蟀,存儲在 Session 對象中的變量不會丟失而是在整個用戶會話中一直存在下去。

e,Session的實現(xiàn)方式和Cookie有一定關(guān)系。建立一個連接就生成一個session id育灸,打開幾個頁面就好幾個了腻窒,這里就用到了Cookie,把session id存在Cookie中磅崭,每次訪問的時候?qū)ession id帶過去就可以識別了.

區(qū)別:

? ? a,存儲數(shù)據(jù)量方面:session 能夠存儲任意的 java 對象儿子,cookie 只能存儲 String 類型的對象

? ? b,一個在客戶端一個在服務(wù)端。因Cookie在客戶端所以可以編輯偽造砸喻,不是十分安全柔逼。

?? c, Session過多時會消耗服務(wù)器資源,大型網(wǎng)站會有專門Session服務(wù)器割岛,Cookie存在客戶端沒問題愉适。

?? d, 域的支持范圍不一樣,比方說a.com的Cookie在a.com下都能用癣漆,而www.a.com的Session在api.a.com下都不能用维咸,解決這個問題的辦法是JSONP或者跨域資源共享。

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

?? 1, 服務(wù)器實現(xiàn)的 session 復(fù)制或 session 共享扑媚,如 webSphere或 JBOSS 在搭集群時配置實現(xiàn) session 復(fù)制或 session 共享.致命缺點:不好擴展和移植腰湾。

? ? 2,利用成熟技術(shù)做session復(fù)制雷恃,如12306使用的gemfire疆股,如常見內(nèi)存數(shù)據(jù)庫redis或memorycache,雖較普適但依賴第三方.

? ? 3,將 session維護在客戶端倒槐,利用 cookie旬痹,但客戶端存在風(fēng)險數(shù)據(jù)不安全,且可以存放的數(shù)據(jù)量較小讨越,所以將session 維護在客戶端還要對 session 中的信息加密两残。

?? 4, 第二種方案和第三種方案的合體,可用gemfire實現(xiàn) session 復(fù)制共享把跨,還可將session 維護在 redis中實現(xiàn) session 共享人弓,同時可將 session 維護在客戶端的cookie 中,但前提是數(shù)據(jù)要加密着逐。

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

單點登錄中慈迈,cookie 被禁用了怎么辦?(一點登陸省有,子網(wǎng)站其他系統(tǒng)不用再登陸)

?? 1, 單點登錄的原理是后端生成一個 session ID痒留,設(shè)置到 cookie谴麦,后面所有請求瀏覽器都會帶上cookie,然后服務(wù)端從cookie獲取 session ID狭瞎,查詢到用戶信息细移。

? ? 2,所以,保持登錄的關(guān)鍵不是cookie熊锭,而是通過cookie 保存和傳輸?shù)?session ID弧轧,本質(zhì)是能獲取用戶信息的數(shù)據(jù)。

? ? 3,除了cookie碗殷,還常用 HTTP 請求頭來傳輸精绎。但這個請求頭瀏覽器不會像cookie一樣自動攜帶,需手工處理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锌妻,一起剝皮案震驚了整個濱河市代乃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌仿粹,老刑警劉巖搁吓,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吭历,居然都是意外死亡堕仔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門晌区,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摩骨,“玉大人,你說我怎么就攤上這事朗若∧瘴澹” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵哭懈,是天一觀的道長灾馒。 經(jīng)常有香客問我,道長遣总,這世上最難降的妖魔是什么睬罗? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮彤避,結(jié)果婚禮上傅物,老公的妹妹穿的比我還像新娘。我一直安慰自己琉预,他們只是感情好董饰,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般卒暂。 火紅的嫁衣襯著肌膚如雪啄栓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天也祠,我揣著相機與錄音昙楚,去河邊找鬼。 笑死诈嘿,一個胖子當(dāng)著我的面吹牛堪旧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奖亚,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼淳梦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了昔字?” 一聲冷哼從身側(cè)響起爆袍,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎作郭,沒想到半個月后陨囊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡夹攒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年蜘醋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芹助。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡堂湖,死狀恐怖闲先,靈堂內(nèi)的尸體忽然破棺而出状土,到底是詐尸還是另有隱情,我是刑警寧澤伺糠,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布蒙谓,位于F島的核電站,受9級特大地震影響训桶,放射性物質(zhì)發(fā)生泄漏累驮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一舵揭、第九天 我趴在偏房一處隱蔽的房頂上張望谤专。 院中可真熱鬧,春花似錦午绳、人聲如沸置侍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜡坊。三九已至杠输,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秕衙,已是汗流浹背蠢甲。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留据忘,地道東北人鹦牛。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像勇吊,于是被迫代替她去往敵國和親能岩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355