session,cookie,sessionStorage,localStorage的區(qū)別及應(yīng)用場(chǎng)景

瀏覽器的緩存機(jī)制提供了可以將用戶數(shù)據(jù)存儲(chǔ)在客戶端上的方式构韵,可以利用cookie,session等跟服務(wù)端進(jìn)行數(shù)據(jù)交互掺逼。

一坑赡、cookie和session

cookie和session都是用來(lái)跟蹤瀏覽器用戶身份的會(huì)話方式。

區(qū)別:

1涂籽、保持狀態(tài):cookie保存在瀏覽器端苹祟,session保存在服務(wù)器端

2、使用方式:

(1)cookie機(jī)制:如果不在瀏覽器中設(shè)置過期時(shí)間评雌,cookie被保存在內(nèi)存中苔咪,生命周期隨瀏覽器的關(guān)閉而結(jié)束,這種cookie簡(jiǎn)稱會(huì)話cookie柳骄。如果在瀏覽器中設(shè)置了cookie的過期時(shí)間,cookie被保存在硬盤中箕般,關(guān)閉瀏覽器后耐薯,cookie數(shù)據(jù)仍然存在,直到過期時(shí)間結(jié)束才消失丝里。

 Cookie是服務(wù)器發(fā)給客戶端的特殊信息曲初,cookie是以文本的方式保存在客戶端,每次請(qǐng)求時(shí)都帶上它
1

(2)session機(jī)制:當(dāng)服務(wù)器收到請(qǐng)求需要?jiǎng)?chuàng)建session對(duì)象時(shí)杯聚,首先會(huì)檢查客戶端請(qǐng)求中是否包含sessionid臼婆。如果有sessionid,服務(wù)器將根據(jù)該id返回對(duì)應(yīng)session對(duì)象幌绍。如果客戶端請(qǐng)求中沒有sessionid颁褂,服務(wù)器會(huì)創(chuàng)建新的session對(duì)象,并把sessionid在本次響應(yīng)中返回給客戶端傀广。通常使用cookie方式存儲(chǔ)sessionid到客戶端颁独,在交互中瀏覽器按照規(guī)則將sessionid發(fā)送給服務(wù)器。如果用戶禁用cookie伪冰,則要使用URL重寫誓酒,可以通過response.encodeURL(url) 進(jìn)行實(shí)現(xiàn);API對(duì)encodeURL的結(jié)束為贮聂,當(dāng)瀏覽器支持Cookie時(shí)靠柑,url不做任何處理寨辩;當(dāng)瀏覽器不支持Cookie的時(shí)候,將會(huì)重寫URL將SessionID拼接到訪問地址后歼冰。

3靡狞、存儲(chǔ)內(nèi)容:cookie只能保存字符串類型,以文本的方式停巷;session通過類似與Hashtable的數(shù)據(jù)結(jié)構(gòu)來(lái)保存耍攘,能支持任何類型的對(duì)象(session中可含有多個(gè)對(duì)象)

4、存儲(chǔ)的大信锨凇:cookie:?jiǎn)蝹€(gè)cookie保存的數(shù)據(jù)不能超過4kb蕾各;session大小沒有限制。

5庆揪、安全性:cookie:針對(duì)cookie所存在的攻擊:Cookie欺騙式曲,Cookie截獲;session的安全性大于cookie缸榛。

原因如下:(1)sessionID存儲(chǔ)在cookie中吝羞,若要攻破session首先要攻破cookie;

(2)sessionID是要有人登錄内颗,或者啟動(dòng)session_start才會(huì)有钧排,所以攻破cookie也不一定能得到sessionID;

(3)第二次啟動(dòng)session_start后均澳,前一次的sessionID就是失效了恨溜,session過期后,sessionID也隨之失效找前。

(4)sessionID是加密的

(5)綜上所述糟袁,攻擊者必須在短時(shí)間內(nèi)攻破加密的sessionID,這很難躺盛。

6项戴、應(yīng)用場(chǎng)景:

cookie:(1)判斷用戶是否登陸過網(wǎng)站槽惫,以便下次登錄時(shí)能夠?qū)崿F(xiàn)自動(dòng)登錄(或者記住密碼)。如果我們刪除cookie躯枢,則每次登錄必須從新填寫登錄的相關(guān)信息。

(2)保存上次登錄的時(shí)間等信息锄蹂。

(3)保存上次查看的頁(yè)面

(4)瀏覽計(jì)數(shù)

session:Session用于保存每個(gè)用戶的專用信息氓仲,變量的值保存在服務(wù)器端,通過SessionID來(lái)區(qū)分不同的客戶。

(1)網(wǎng)上商城中的購(gòu)物車

(2)保存用戶登錄信息

(3)將某些數(shù)據(jù)放入session中晰洒,供同一用戶的不同頁(yè)面使用

(4)防止用戶非法登錄

7、缺點(diǎn):cookie:(1)大小受限

(2)用戶可以操作(禁用)cookie谍珊,使功能受限

(3)安全性較低

(4)有些狀態(tài)不可能保存在客戶端。

(5)每次訪問都要傳送cookie給服務(wù)器急侥,浪費(fèi)帶寬砌滞。

(6)cookie數(shù)據(jù)有路徑(path)的概念,可以限制cookie只屬于某個(gè)路徑下坏怪。

session:(1)Session保存的東西越多,就越占用服務(wù)器內(nèi)存铝宵,對(duì)于用戶在線人數(shù)較多的網(wǎng)站,服務(wù)器的內(nèi)存壓力會(huì)比較大鹏秋。

(2)依賴于cookie(sessionID保存在cookie),如果禁用cookie横朋,則要使用URL重寫,不安全

(3)創(chuàng)建Session變量有很大的隨意性叶撒,可隨時(shí)調(diào)用,不需要開發(fā)者做精確地處理,所以压汪,過度使用session變量將會(huì)導(dǎo)致代碼不可讀而且不好維護(hù)。

二止剖、WebStorage

WebStorage的目的是克服由cookie所帶來(lái)的一些限制,當(dāng)數(shù)據(jù)需要被嚴(yán)格控制在客戶端時(shí)亭引,不需要持續(xù)的將數(shù)據(jù)發(fā)回服務(wù)器皮获。

WebStorage兩個(gè)主要目標(biāo):(1)提供一種在cookie之外存儲(chǔ)會(huì)話數(shù)據(jù)的路徑焙蚓。(2)提供一種存儲(chǔ)大量可以跨會(huì)話存在的數(shù)據(jù)的機(jī)制。

HTML5的WebStorage提供了兩種API:localStorage(本地存儲(chǔ))和sessionStorage(會(huì)話存儲(chǔ))萌京。

1、生命周期:localStorage:localStorage的生命周期是永久的知残,關(guān)閉頁(yè)面或?yàn)g覽器之后localStorage中的數(shù)據(jù)也不會(huì)消失比庄。localStorage除非主動(dòng)刪除數(shù)據(jù),否則數(shù)據(jù)永遠(yuǎn)不會(huì)消失佳窑。

sessionStorage的生命周期是在僅在當(dāng)前會(huì)話下有效制恍。sessionStorage引入了一個(gè)“瀏覽器窗口”的概念华嘹,sessionStorage是在同源的窗口中始終存在的數(shù)據(jù)吧趣。只要這個(gè)瀏覽器窗口沒有關(guān)閉耙厚,即使刷新頁(yè)面或者進(jìn)入同源另一個(gè)頁(yè)面,數(shù)據(jù)依然存在薛躬。但是sessionStorage在關(guān)閉了瀏覽器窗口后就會(huì)被銷毀。同時(shí)獨(dú)立的打開同一個(gè)窗口同一個(gè)頁(yè)面八匠,sessionStorage也是不一樣的。

2梨树、存儲(chǔ)大嗅:localStorage和sessionStorage的存儲(chǔ)數(shù)據(jù)大小一般都是:5MB

3抡四、存儲(chǔ)位置:localStorage和sessionStorage都保存在客戶端仗谆,不與服務(wù)器進(jìn)行交互通信。

4隶垮、存儲(chǔ)內(nèi)容類型:localStorage和sessionStorage只能存儲(chǔ)字符串類型,對(duì)于復(fù)雜的對(duì)象可以使用ECMAScript提供的JSON對(duì)象的stringify和parse來(lái)處理

5狸吞、獲取方式:localStorage:window.localStorage;勉耀;sessionStorage:window.sessionStorage;。

6瑰排、應(yīng)用場(chǎng)景:localStoragese:常用于長(zhǎng)期登錄(+判斷用戶是否已登錄),適合長(zhǎng)期保存在本地的數(shù)據(jù)崇渗。sessionStorage:敏感賬號(hào)一次性登錄京郑;

WebStorage的優(yōu)點(diǎn):

(1)存儲(chǔ)空間更大:cookie為4KB宅广,而WebStorage是5MB些举;

(2)節(jié)省網(wǎng)絡(luò)流量:WebStorage不會(huì)傳送到服務(wù)器,存儲(chǔ)在本地的數(shù)據(jù)可以直接獲取户魏,也不會(huì)像cookie一樣美詞請(qǐng)求都會(huì)傳送到服務(wù)器,所以減少了客戶端和服務(wù)器端的交互关翎,節(jié)省了網(wǎng)絡(luò)流量鸠信;

(3)對(duì)于那種只需要在用戶瀏覽一組頁(yè)面期間保存而關(guān)閉瀏覽器后就可以丟棄的數(shù)據(jù)纵寝,sessionStorage會(huì)非常方便星立;

(4)快速顯示:有的數(shù)據(jù)存儲(chǔ)在WebStorage上,再加上瀏覽器本身的緩存室奏。獲取數(shù)據(jù)時(shí)可以從本地獲取會(huì)比從服務(wù)器端獲取快得多劲装,所以速度更快窍奋;

(5)安全性:WebStorage不會(huì)隨著HTTP header發(fā)送到服務(wù)器端酱畅,所以安全性相對(duì)于cookie來(lái)說比較高一些江场,不會(huì)擔(dān)心截獲,但是仍然存在偽造問題餐蔬;

(6)WebStorage提供了一些方法碎紊,數(shù)據(jù)操作比cookie方便樊诺;

setItem (key, value) —— 保存數(shù)據(jù),以鍵值對(duì)的方式儲(chǔ)存信息秃嗜。

     getItem (key) ——  獲取數(shù)據(jù)顿膨,將鍵值傳入锅锨,即可獲取到對(duì)應(yīng)的value值恋沃。

      removeItem (key) ——  刪除單個(gè)數(shù)據(jù),根據(jù)鍵值移除對(duì)應(yīng)的信息恕洲。

      clear () ——  刪除所有的數(shù)據(jù)

      key (index) —— 獲取某個(gè)索引的key
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梅割,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子炮捧,更是在濱河造成了極大的恐慌,老刑警劉巖末誓,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件书蚪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡殊校,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門呕屎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)敬察,“玉大人,你說我怎么就攤上這事莲祸⊥钟” “怎么了田盈?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)简软。 經(jīng)常有香客問我,道長(zhǎng)替饿,這世上最難降的妖魔是什么贸典? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮廊驼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绳锅。我一直安慰自己酝掩,他們只是感情好鳞芙,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布原朝。 她就那樣靜靜地躺著,像睡著了一般喳坠。 火紅的嫁衣襯著肌膚如雪茂蚓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天聋涨,我揣著相機(jī)與錄音,去河邊找鬼脊凰。 笑死淹朋,一個(gè)胖子當(dāng)著我的面吹牛笙各,可吹牛的內(nèi)容都是我干的础芍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼惶楼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼诊杆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起晨汹,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎剥扣,沒想到半個(gè)月后铝穷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钠怯,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晦炊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年宁脊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朦佩。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宋彼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情输涕,我是刑警寧澤慨畸,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站寸士,受9級(jí)特大地震影響碴卧,放射性物質(zhì)發(fā)生泄漏乃正。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一瓮具、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叹阔,春花似錦传睹、人聲如沸耳幢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)修档。三九已至,卻和暖如春吱窝,著一層夾襖步出監(jiān)牢的瞬間迫靖,已是汗流浹背院峡。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工系宜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人俩垃。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓汰寓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親有滑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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