Cookie出現(xiàn)兩個(gè)同名Key的問題(cookie知識(shí)點(diǎn))

問題

  Http請(qǐng)求中出現(xiàn)了兩個(gè)同名Cookie,導(dǎo)致服務(wù)端獲取到的錯(cuò)誤的信息


原理

  Cookie不僅僅有名字和值兩個(gè)屬性丧靡,還有域(domain)澡刹、路徑(path)等屬性。其中谆级,不同的域、不同的路徑下可以存在同樣名字的cookie讼积。一般我們?cè)O(shè)置cookie的方法是用一個(gè)同樣名字肥照、一個(gè)值。這時(shí)就一定要搞清楚你要設(shè)置的cookie的域和路徑勤众,否則就會(huì)產(chǎn)生問題中的情況舆绎。


再次復(fù)習(xí)一下Cookie的屬性

屬性描述

nameCookie的名稱,Cookie一旦創(chuàng)建们颜,名稱便不可更改

valueCookie的值吕朵。如果值為Unicode字符,需要為字符編碼窥突。如果值為二進(jìn)制數(shù)據(jù)努溃,則需要使用BASE64編碼

maxAgeCookie失效的時(shí)間,單位秒阻问。如果為正數(shù)梧税,則該Cookie在maxAge秒之后失效。如果為負(fù)數(shù)称近,該Cookie為臨時(shí)Cookie第队,關(guān)閉瀏覽器即失效,瀏覽器也不會(huì)以任何形式保存該Cookie刨秆。如果為0凳谦,表示刪除該Cookie。默認(rèn)為-1衡未。

secure該Cookie是否僅被使用安全協(xié)議傳輸晾蜘。安全協(xié)議邻眷。安全協(xié)議有HTTPS,SSL等剔交,在網(wǎng)絡(luò)上傳輸數(shù)據(jù)之前先將數(shù)據(jù)加密肆饶。默認(rèn)為false。

pathCookie的使用路徑岖常。如果設(shè)置為“/sessionWeb/”驯镊,則只有contextPath為“/sessionWeb”的程序可以訪問該Cookie。如果設(shè)置為“/”竭鞍,則本域名下contextPath都可以訪問該Cookie板惑。注意最后一個(gè)字符必須為“/”。

domain可以訪問該Cookie的域名偎快。如果設(shè)置為“.google.com”冯乘,則所有以“google.com”結(jié)尾的域名都可以訪問該Cookie。注意第一個(gè)字符必須為“.”晒夹。

comment該Cookie的用處說明裆馒,瀏覽器顯示Cookie信息的時(shí)候顯示該說明。

versionCookie使用的版本號(hào)丐怯。0表示遵循Netscape的Cookie規(guī)范喷好,1表示遵循W3C的RFC 2109規(guī)范


Cookie的有效期

  Cookie的maxAge決定著Cookie的有效期,單位為秒(Second)读跷。Cookie中通過getMaxAge()方法與setMaxAge(int maxAge)方法來讀寫maxAge屬性梗搅。

  如果maxAge屬性為正數(shù),則表示該Cookie會(huì)在maxAge秒之后自動(dòng)失效效览。瀏覽器會(huì)將maxAge為正數(shù)的Cookie持久化无切,即寫到對(duì)應(yīng)的Cookie文件中。無論客戶關(guān)閉了瀏覽器還是電腦丐枉,只要還在maxAge秒之前订雾,登錄網(wǎng)站時(shí)該Cookie仍然有效。下面代碼中的Cookie信息將永遠(yuǎn)有效矛洞。

  如果maxAge為負(fù)數(shù),則表示該Cookie僅在本瀏覽器窗口以及本窗口打開的子窗口內(nèi)有效烫映,關(guān)閉窗口后該Cookie即失效沼本。maxAge為負(fù)數(shù)的Cookie,為臨時(shí)性Cookie锭沟,不會(huì)被持久化抽兆,不會(huì)被寫到Cookie文件中。Cookie信息保存在瀏覽器內(nèi)存中族淮,因此關(guān)閉瀏覽器該Cookie就消失了辫红。Cookie默認(rèn)的maxAge值為-1凭涂。

  如果maxAge為0,則表示刪除該Cookie贴妻。Cookie機(jī)制沒有提供刪除Cookie的方法切油,因此通過設(shè)置該Cookie即時(shí)失效實(shí)現(xiàn)刪除Cookie的效果。失效的Cookie會(huì)被瀏覽器從Cookie文件或者內(nèi)存中刪除名惩,

  response對(duì)象提供的Cookie操作方法只有一個(gè)添加操作add(Cookie cookie)澎胡。

要想修改Cookie只能使用一個(gè)同名的Cookie來覆蓋原來的Cookie,達(dá)到修改的目的娩鹉。刪除時(shí)只需要把maxAge修改為0即可攻谁。

  從客戶端讀取Cookie時(shí),包括maxAge在內(nèi)的其他屬性都是不可讀的弯予,也不會(huì)被提交戚宦。瀏覽器提交Cookie時(shí)只會(huì)提交name與value屬性。maxAge屬性只被瀏覽器用來判斷Cookie是否過期锈嫩。


Cookie的修改受楼、刪除

  Cookie并不提供修改、刪除操作祠挫。如果要修改某個(gè)Cookie那槽,只需要新建一個(gè)同名的Cookie,添加到response中覆蓋原來的Cookie等舔。

  如果要?jiǎng)h除某個(gè)Cookie骚灸,只需要新建一個(gè)同名的Cookie,并將maxAge設(shè)置為0慌植,并添加到response中覆蓋原來的Cookie甚牲。

  注意:修改、刪除Cookie時(shí)蝶柿,新建的Cookie除value丈钙、maxAge之外的所有屬性,例如name交汤、path雏赦、domain等,都要與原Cookie完全一樣芙扎。否則星岗,瀏覽器將視為兩個(gè)不同的Cookie不予覆蓋,導(dǎo)致修改戒洼、刪除失敗俏橘。


Cookie的域名

  Cookie是不可跨域名的。域名www.google.com頒發(fā)的Cookie不會(huì)被提交到域名www.baidu.com去圈浇。這是由Cookie的隱私安全機(jī)制決定的寥掐。隱私安全機(jī)制能夠禁止網(wǎng)站非法獲取其他網(wǎng)站的Cookie靴寂。

  正常情況下,同一個(gè)一級(jí)域名下的兩個(gè)二級(jí)域名如www.baidu.com和images.baidu.com也不能交互使用Cookie召耘,因?yàn)槎叩挠蛎⒉粐?yán)格相同百炬。如果想所有baidu.com名下的二級(jí)域名都可以使用該Cookie,需要設(shè)置Cookie的domain參數(shù)為.baidu.com

  讀者可以修改本機(jī)C:\WINDOWS\system32\drivers\etc下的hosts文件來配置多個(gè)臨時(shí)域名來驗(yàn)證domain屬性怎茫。

  注意:domain參數(shù)必須以點(diǎn)(".")開始收壕。另外,name相同但domain不同的兩個(gè)Cookie是兩個(gè)不同的Cookie轨蛤。如果想要兩個(gè)域名完全不同的網(wǎng)站共有Cookie蜜宪,可以生成兩個(gè)Cookie,domain屬性分別為兩個(gè)域名祥山,輸出到客戶端圃验。


Cookie的路徑

  domain屬性決定運(yùn)行訪問Cookie的域名,而path屬性決定允許訪問Cookie的路徑(ContextPath)缝呕。例如澳窑,如果只允許/sessionWeb/下的程序使用Cookie,可以這么寫cookie.setPath("/session/")供常。

  設(shè)置為“/”時(shí)允許所有路徑使用Cookie摊聋。path屬性需要使用符號(hào)“/”結(jié)尾。name相同但domain相同的兩個(gè)Cookie也是兩個(gè)不同的Cookie栈暇。

  頁(yè)面只能獲取它屬于的Path的Cookie麻裁。例如/session/test/a.jsp不能獲取到路徑為/session/abc/的Cookie。


Cookie的安全屬性

  HTTP協(xié)議不僅是無狀態(tài)的源祈,而且是不安全的煎源。使用HTTP協(xié)議的數(shù)據(jù)不經(jīng)過任何加密就直接在網(wǎng)絡(luò)上傳播,有被截獲的可能香缺。使用HTTP協(xié)議傳輸很機(jī)密的內(nèi)容是一種隱患手销。如果不希望Cookie在HTTP等非安全協(xié)議中傳輸,可以設(shè)置Cookie的secure屬性為true图张。瀏覽器只會(huì)在HTTPS和SSL等安全協(xié)議中傳輸此類Cookie锋拖。設(shè)置secure屬性為true的代碼是cookie.setSecure(true); ? ? ? ? ? ? ? ? ?

  secure屬性并不能對(duì)Cookie內(nèi)容加密,因而不能保證絕對(duì)的安全性祸轮。如果需要高安全性兽埃,需要在程序中對(duì)Cookie內(nèi)容加密、解密倔撞,以防泄密。


JavaScript操作Cookie

  Cookie是保存在瀏覽器端的慕趴,因此瀏覽器具有操作Cookie的先決條件痪蝇。瀏覽器可以使用腳本程序如JavaScript或者VBScript等操作Cookie鄙陡。這里以JavaScript為例介紹常用的Cookie操作。例如下面的代碼會(huì)輸出本頁(yè)面所有的Cookie躏啰。

  <script>document.write(document.cookie);</script>

  由于JavaScript能夠任意地讀寫Cookie趁矾,給網(wǎng)站帶來安全隱患,W3C標(biāo)準(zhǔn)的瀏覽器會(huì)阻止JavaScript讀寫任何不屬于自己網(wǎng)站的Cookie给僵。換句話說毫捣,A網(wǎng)站的JavaScript程序讀寫B(tài)網(wǎng)站的Cookie不會(huì)有任何結(jié)果。

  部分瀏覽器支持設(shè)置HttpOnly屬性帝际,如果在cookie中設(shè)置了HttpOnly屬性蔓同,那么通過js腳本將無法讀取到cookie信息,這樣能有效的防止XSS攻擊蹲诀。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末斑粱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子脯爪,更是在濱河造成了極大的恐慌则北,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痕慢,死亡現(xiàn)場(chǎng)離奇詭異尚揣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)掖举,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門快骗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拇泛,你說我怎么就攤上這事滨巴。” “怎么了俺叭?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵恭取,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我熄守,道長(zhǎng)蜈垮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任裕照,我火速辦了婚禮攒发,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘晋南。我一直安慰自己惠猿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布负间。 她就那樣靜靜地躺著偶妖,像睡著了一般姜凄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趾访,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天态秧,我揣著相機(jī)與錄音,去河邊找鬼扼鞋。 笑死申鱼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的云头。 我是一名探鬼主播捐友,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼盘寡!你這毒婦竟也來了楚殿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤竿痰,失蹤者是張志新(化名)和其女友劉穎脆粥,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體影涉,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡变隔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蟹倾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匣缘。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鲜棠,靈堂內(nèi)的尸體忽然破棺而出肌厨,到底是詐尸還是另有隱情,我是刑警寧澤豁陆,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布柑爸,位于F島的核電站,受9級(jí)特大地震影響盒音,放射性物質(zhì)發(fā)生泄漏表鳍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一祥诽、第九天 我趴在偏房一處隱蔽的房頂上張望譬圣。 院中可真熱鬧,春花似錦雄坪、人聲如沸厘熟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)绳姨。三九已至颇玷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間就缆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工琼锋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钞诡,地道東北人屡拨。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像切揭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锁摔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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

  • 如題: 為啥廓旬? 轉(zhuǎn)載自:Cookie出現(xiàn)兩個(gè)同名Key的問題Cookie不僅僅有名字和值兩個(gè)屬性,還有域(doma...
    程序員七平閱讀 5,171評(píng)論 0 0
  • 生活感悟:一個(gè)人總要走陌生的路谐腰,看陌生的風(fēng)景孕豹,聽陌生的歌,然后在某個(gè)不經(jīng)意的瞬間十气,你會(huì)發(fā)現(xiàn)励背,原本費(fèi)盡心機(jī)想要忘記的...
    ggr閱讀 1,042評(píng)論 0 2
  • 經(jīng)常聽到大家說自己穿某某色彩不好看叶眉,其實(shí)很多時(shí)候不是顏色沒選好的問題,而是比例沒有搭配好芹枷,就像紅配綠衅疙,如果面積相似...
    晨曦的一室一間閱讀 356評(píng)論 0 1
  • 歌詞: 讓我流下眼淚的不止昨夜的酒 回憶是思念的酒 你在我后半生的城市里長(zhǎng)生不老 《鴿子》 生活是這樣 不如詩(shī) ...
    七個(gè)胡蘿卜閱讀 696評(píng)論 0 1
  • 過完元旦才幾天,我的狀態(tài)卻像在經(jīng)歷一場(chǎng)歷劫似的鸳慈,總是緩不過來饱溢。 疲憊乏力,煩燥易怒蝶涩,對(duì)周圍的人理朋,對(duì)...
    芷語筆記閱讀 238評(píng)論 0 2