cookie & set-cookie

摘自透視HTTP協(xié)議讓我知道你是誰:HTTP的Cookie機(jī)制

響應(yīng)頭字段 Set-Cookie

當(dāng)用戶通過瀏覽器第一次訪問服務(wù)器的時候,服務(wù)器肯定是不知道他的身份的慌随。所以,就要創(chuàng)建一個獨特的身份標(biāo)識數(shù)據(jù)介却,格式是key=value楔绞,然后放進(jìn) Set-Cookie 字段里框喳,隨著響應(yīng)報文一同發(fā)給瀏覽器。

瀏覽器收到響應(yīng)報文锨并,看到里面有 Set-Cookie露该,知道這是服務(wù)器給的身份標(biāo)識,于是就保存起來第煮,下次再請求的時候就自動把這個值放進(jìn) Cookie 字段里發(fā)給服務(wù)器抑党。

因為第二次請求里面有了 Cookie 字段底靠,服務(wù)器就知道這個用戶不是新人,之前來過鳄逾,就可以拿出 Cookie 里的值笆呆,識別出用戶的身份俄精,然后提供個性化的服務(wù)。

不過因為服務(wù)器的“記憶能力”實在是太差,所以,服務(wù)器有時會在響應(yīng)頭里添加多個 Set-Cookie,存儲多個key=value

但瀏覽器這邊發(fā)送時不需要用多個 Cookie 字段,只要在一行里用“;”隔開就行角溃。

image.png

請求頭字段 Cookie

Cookie 就是服務(wù)器委托瀏覽器存儲在客戶端里的一些數(shù)據(jù),而這些數(shù)據(jù)通常都會記錄用戶的關(guān)鍵識別信息。所以纸型,就需要在key=value再用一些手段來保護(hù),防止外泄或竊取梅忌,這些手段就是 Cookie 的屬性狰腌。

image.png

首先,我們應(yīng)該設(shè)置 Cookie 的生存周期牧氮,即有效期琼腔,可以使用 ExpiresMax-Age 兩個屬性來設(shè)置。Expires俗稱過期時間踱葛,用絕對時間點丹莲,可以理解為截止日期deadlineMax-Age相對時間尸诽,單位是秒甥材,瀏覽器用收到報文的時間點再加上 Max-Age,就可以得到失效的絕對時間性含。它倆可以同時出現(xiàn)洲赵,兩者可一致,也可不一致胶滋,但瀏覽器會優(yōu)先采用 Max-Age

其次,我們需要設(shè)置 Cookie 的作用域悲敷,讓瀏覽器僅發(fā)送給特定的服務(wù)器和 URI究恤,避免被其他網(wǎng)站盜用。DomainPath指定了 Cookie 所屬的域名和路徑后德,瀏覽器在發(fā)送 Cookie 前會從 URI 中提取出 hostpath 部分部宿,對比 ,如果不滿足條件,就不會在請求頭里發(fā)送 Cookie理张。

最后要考慮的就是 Cookie 的安全性了赫蛇,盡量不要讓服務(wù)器以外的人看到。寫過前端的同學(xué)一定知道雾叭,在 JS 腳本里可以用 document.cookie 來讀寫 Cookie 數(shù)據(jù)悟耘,這就帶來了安全隱患,有可能會導(dǎo)致跨站腳本XSS攻擊竊取數(shù)據(jù)织狐。屬性HttpOnly會告訴瀏覽器暂幼,此 Cookie 只能通過瀏覽器 HTTP 協(xié)議傳輸,禁止其他方式訪問移迫,瀏覽器的 JS 引擎就會禁用 document.cookie 等一切相關(guān)的 API旺嬉,腳本攻擊也就無從談起了。

另一個屬性SameSite可以防范跨站請求偽造XSRF攻擊厨埋,設(shè)置成SameSite=Strict可以嚴(yán)格限定 Cookie 不能隨著跳轉(zhuǎn)鏈接跨站發(fā)送邪媳,而SameSite=Lax則略寬松一點,允許GET/HEAD 等安全方法荡陷,但禁止 POST 跨站發(fā)送雨效。

還有一個屬性叫Secure,表示這個 Cookie 僅能用 HTTPS 協(xié)議加密傳輸亲善,明文的 HTTP 協(xié)議會禁止發(fā)送设易。但 Cookie 本身不是加密的,瀏覽器里還是以明文的形式存在蛹头。

Chrome 開發(fā)者工具是查看 Cookie 的有力工具顿肺,在Network-Cookies里可以看到單個頁面 Cookie 的各種屬性,另一個Application面板里則能夠方便地看到全站的所有 Cookie渣蜗。

image.png
image.png

Cookie 的應(yīng)用

Cookie 最基本的一個用途就是身份識別屠尊,保存用戶的登錄信息,實現(xiàn)會話事務(wù)耕拷。比如讼昆,你用賬號和密碼登錄某電商,登錄成功后網(wǎng)站服務(wù)器就會發(fā)給瀏覽器一個 Cookie骚烧,內(nèi)容大概是name=yourid浸赫,這樣就成功地把身份標(biāo)簽貼在了你身上。之后你在網(wǎng)站里隨便訪問哪件商品的頁面赃绊,瀏覽器都會自動把身份 Cookie 發(fā)給服務(wù)器既峡,所以服務(wù)器總會知道你的身份,一方面免去了重復(fù)登錄的麻煩碧查,另一方面也能夠自動記錄你的瀏覽記錄和購物下單(在后臺數(shù)據(jù)庫或者也用 Cookie)运敢,實現(xiàn)了狀態(tài)保持校仑。

Cookie 的另一個常見用途是廣告跟蹤。你上網(wǎng)的時候肯定看過很多的廣告圖片传惠,這些圖片背后都是廣告商網(wǎng)站(例如 Google)迄沫,它會“偷偷地”給你貼上 Cookie 小紙條,這樣你上其他的網(wǎng)站卦方,別的廣告就能用 Cookie 讀出你的身份羊瘩,然后做行為分析,再推給你廣告愿汰。這種 Cookie 不是由訪問的主站存儲的困后,所以又叫第三方 Cookie(third-party cookie)。如果廣告商勢力很大衬廷,廣告到處都是摇予,那么就比較“恐怖”了,無論你走到哪里它都會通過 Cookie 認(rèn)出你來吗跋,實現(xiàn)廣告“精準(zhǔn)打擊”侧戴。

為了防止濫用 Cookie 搜集用戶隱私,互聯(lián)網(wǎng)組織相繼提出了 DNT(Do Not Track)P3P(Platform for Privacy Preferences Project)跌宛,但實際作用不大酗宋。


jsessionid什么時候生成并傳遞到前端的?

  • 如果客戶端請求的cookie中不包含JSESSIONID疆拘,服務(wù)端調(diào)用request.getSession()時就會生成并傳遞給客戶端蜕猫,此次響應(yīng)頭會包含設(shè)置cookie的信息
image.png
  • 如果客戶端請求的cookie中包含JSESSIONID,服務(wù)端調(diào)用request.getSession()時就會根據(jù)JSESSIONID進(jìn)行查找對象哎迄,如果能查到就返回回右,否則就跟沒傳遞JSESSIONID一樣;
    image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漱挚,一起剝皮案震驚了整個濱河市翔烁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旨涝,老刑警劉巖蹬屹,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異白华,居然都是意外死亡慨默,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門弧腥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厦取,“玉大人,你說我怎么就攤上這事鸟赫∷馀郑” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵抛蚤,是天一觀的道長台谢。 經(jīng)常有香客問我,道長岁经,這世上最難降的妖魔是什么朋沮? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮缀壤,結(jié)果婚禮上樊拓,老公的妹妹穿的比我還像新娘。我一直安慰自己塘慕,他們只是感情好筋夏,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著图呢,像睡著了一般条篷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛤织,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天赴叹,我揣著相機(jī)與錄音,去河邊找鬼指蚜。 笑死乞巧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的摊鸡。 我是一名探鬼主播绽媒,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柱宦!你這毒婦竟也來了些椒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤掸刊,失蹤者是張志新(化名)和其女友劉穎免糕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忧侧,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡石窑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蚓炬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片松逊。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肯夏,靈堂內(nèi)的尸體忽然破棺而出经宏,到底是詐尸還是另有隱情犀暑,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布烁兰,位于F島的核電站耐亏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏沪斟。R本人自食惡果不足惜广辰,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望主之。 院中可真熱鬧择吊,春花似錦、人聲如沸槽奕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粤攒。三九已至枉长,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間琼讽,已是汗流浹背必峰。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留钻蹬,地道東北人吼蚁。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像问欠,于是被迫代替她去往敵國和親肝匆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359