Cookie

參考:http://harttle.com/2017/04/04/using-http-cache.html
參考:http://harttle.com/2015/08/10/cookie-session.html
本文絕大部分內(nèi)容來自上述地址琉雳,做為學(xué)習(xí)資料修改后保存,感謝作者

Cookie檐束、SessionStorage被丧、LocalStorage 是可以被用來在瀏覽器端存儲數(shù)據(jù)甥桂,都是字符串類型的鍵值對邮旷。Cookie 是為了保持HTTP的狀態(tài)婶肩,后兩者屬于WebStorage律歼,是用來儲存客戶端數(shù)據(jù)。

Cookie是存儲在客戶端的小型文本文件制圈,包含若干鍵值對鲸鹦,鍵值對可以設(shè)置過期時間(默認過期為關(guān)閉瀏覽器時)馋嗜;
Cookie會在每次發(fā)送HTTP請求時附加到Cookie頭字段域庇,服務(wù)器根據(jù)Cookie得知用戶的狀態(tài)听皿。
HTTP標準中宽档,規(guī)定Cookie至少要有4K吗冤,至少支持300項Cookie,每個域名至少支持20項覆致。    
LocalStorage、SessionStorage 是在本地儲存儡羔,不會被發(fā)送到服務(wù)器上,一般支持5-10M。
LocalStorage沒有過期時間璧诵,除非手動刪除它會一直存在汰蜘。
SessionStorage在瀏覽器會話結(jié)束時(關(guān)閉標簽頁,不包括刷新和跳轉(zhuǎn))清空之宿。
簡單的整理
1. cookie由服務(wù)端生成,用于標識用戶身份;而兩個storage用于瀏覽器端緩存數(shù)據(jù)
2. 三者都是鍵值對的集合
3. 一般情況下瀏覽器端不會修改cookie,但會頻繁操作兩個storage
4. 如果保存了cookie的話,http請求中一定會帶上;而兩個storage可以由腳本選擇性的提交
5. 會話的storage會在會話結(jié)束后銷毀;而local的那個會永久保存直到覆蓋族操。cookie會在過期時間之后銷毀。
6. 安全性方面,cookie中最好不要放置任何明文的東西比被。兩個storage的數(shù)據(jù)提交后在服務(wù)端一定要校驗(其實任何payload和qs里的參數(shù)都要校驗)色难。

Web Storage帶來的好處:
1.減少網(wǎng)絡(luò)流量:一旦數(shù)據(jù)保存在本地后,就可以避免再向服務(wù)器請求數(shù)據(jù)姐赡,因此減少不必要的數(shù)據(jù)請求莱预,減.少數(shù)據(jù)在瀏覽器和服務(wù)器間不必要地來回傳遞。
2.快速顯示數(shù)據(jù):性能好项滑,從本地讀數(shù)據(jù)比通過網(wǎng)絡(luò)從服務(wù)器獲得數(shù)據(jù)快得多依沮,本地數(shù)據(jù)可以即時獲得枪狂。再加上網(wǎng)頁本身也可以有緩存,因此整個頁面和數(shù)據(jù)都在本地的話薄嫡,可以立即顯示。
3.臨時存儲:很多時候數(shù)據(jù)只需要在用戶瀏覽一組頁面期間使用,關(guān)閉窗口后數(shù)據(jù)就可以丟棄了,這種情況使用sessionStorage非常方便

image.png

Cache-Control

        Cache-control: no-cache, no-store, must-revalidate 不緩存
        Cache-control: private 僅UA可緩存,代理服務(wù)器不能緩存
        Cache-control: public 都可可以緩存
        Cache-Control:public, max-age=31536000 指定緩存時間
image.png

Cookie 防篡改機制

    1. 在服務(wù)器中配置一個不為人知的字符串(我們叫它Secret)险胰,比如:x$sfz32榆综。
    2. 當服務(wù)器需要設(shè)置Cookie時(比如authed=false),不僅設(shè)置authed的值為false, 在值的后面進一步設(shè)置一個簽名挪哄,最終設(shè)置的Cookie是authed=false|6hTiBl7lVpd1P斯入。
    3. 簽名6hTiBl7lVpd1P是這樣生成的:Hash('x$sfz32'+'true')涵防。 要設(shè)置的值與Secret相加再取哈希。
    4. 用戶收到HTTP響應(yīng)并發(fā)現(xiàn)頭字段Set-Cookie: authed=false|6hTiBl7lVpd1P。
    5. 用戶在發(fā)送HTTP請求時证舟,篡改了authed值,設(shè)置頭字段Cookie: authed=true|???。 因為用戶不知道Secret,無法生成簽名,只能隨便填一個。
    6.服務(wù)器收到HTTP請求,發(fā)現(xiàn)Cookie: authed=true|???。服務(wù)器開始進行校驗: Hash('true'+'x$sfz32'),便會發(fā)現(xiàn)用戶提供的簽名不正確

Session:

Session 是存儲在服務(wù)器端的,避免了在客戶端Cookie中存儲敏感數(shù)據(jù)。 Session 可以存儲在HTTP服務(wù)器的內(nèi)存中,也可以存在內(nèi)存數(shù)據(jù)庫(如redis)中, 對于重量級的應(yīng)用甚至可以存儲在數(shù)據(jù)庫中。

我們以存儲在redis中的Session為例,還是考察如何驗證用戶登錄狀態(tài)的問題。

    1. 用戶提交包含用戶名和密碼的表單晾捏,發(fā)送HTTP請求惦辛。
    2. 服務(wù)器驗證用戶發(fā)來的用戶名密碼胖齐。
    3. 如果正確則把當前用戶名(通常是用戶對象)存儲到redis中,并生成它在redis中的ID呀伙。這個ID稱為Session ID,通過Session ID可以從Redis中取出對應(yīng)的用戶對象阳准, 敏感數(shù)據(jù)(比如authed=true)都存儲在這個用戶對象中。
    4. 設(shè)置Cookie為sessionId=xxxxxx|checksum并發(fā)送HTTP響應(yīng)帮寻, 仍然為每一項Cookie都設(shè)置簽名。
    5. 用戶收到HTTP響應(yīng)后,便看不到任何敏感數(shù)據(jù)了舅列。在此后的請求中發(fā)送該Cookie給服務(wù)器。
    6. 服務(wù)器收到此后的HTTP請求后卧蜓,發(fā)現(xiàn)Cookie中有SessionID帐要,進行放篡改驗證。
    7. 如果通過了驗證弥奸,根據(jù)該ID從Redis中取出對應(yīng)的用戶對象榨惠, 查看該對象的狀態(tài)并繼續(xù)執(zhí)行業(yè)務(wù)邏輯。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盛霎,一起剝皮案震驚了整個濱河市冒冬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌摩渺,老刑警劉巖简烤,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異摇幻,居然都是意外死亡横侦,警方通過查閱死者的電腦和手機挥萌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枉侧,“玉大人引瀑,你說我怎么就攤上這事≌ツ伲” “怎么了憨栽?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長翼虫。 經(jīng)常有香客問我屑柔,道長,這世上最難降的妖魔是什么珍剑? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任掸宛,我火速辦了婚禮,結(jié)果婚禮上招拙,老公的妹妹穿的比我還像新娘唧瘾。我一直安慰自己,他們只是感情好别凤,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布饰序。 她就那樣靜靜地躺著,像睡著了一般规哪。 火紅的嫁衣襯著肌膚如雪菌羽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天由缆,我揣著相機與錄音注祖,去河邊找鬼。 笑死均唉,一個胖子當著我的面吹牛是晨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舔箭,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼罩缴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了层扶?” 一聲冷哼從身側(cè)響起箫章,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎镜会,沒想到半個月后檬寂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡戳表,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年桶至,在試婚紗的時候發(fā)現(xiàn)自己被綠了昼伴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡镣屹,死狀恐怖圃郊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情女蜈,我是刑警寧澤持舆,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站伪窖,受9級特大地震影響逸寓,放射性物質(zhì)發(fā)生泄漏狐援。R本人自食惡果不足惜康吵,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧汹买,春花似錦、人聲如沸聊倔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耙蔑。三九已至见妒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甸陌,已是汗流浹背须揣。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钱豁,地道東北人耻卡。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像牲尺,于是被迫代替她去往敵國和親卵酪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

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