一、Cookie膳音、session和localStorage的區(qū)別
cookie的內(nèi)容主要包括:名字召衔、值、過(guò)期時(shí)間祭陷、路徑和域苍凛。路徑與域一起構(gòu)成cookie的作用范圍。若不設(shè)置時(shí)間兵志,則表示這個(gè)cookie的生命期為瀏覽器會(huì)話期間醇蝴,關(guān)閉瀏覽器窗口,cookie就會(huì)消失想罕。這種生命期為瀏覽器會(huì)話期的cookie被稱為會(huì)話cookie悠栓。
會(huì)話cookie一般不存儲(chǔ)在硬盤(pán)而是保存在內(nèi)存里,當(dāng)然這個(gè)行為并不是規(guī)范規(guī)定的按价。若設(shè)置了過(guò)期時(shí)間惭适,瀏覽器就會(huì)把cookie保存到硬盤(pán)上,關(guān)閉后再打開(kāi)瀏覽器這些cookie仍然有效直到超過(guò)設(shè)定的過(guò)期時(shí)間楼镐。對(duì)于保存在內(nèi)存里的cookie癞志,不同的瀏覽器有不同的處理方式session機(jī)制。
當(dāng)程序需要為某個(gè)客戶端的請(qǐng)求創(chuàng)建一個(gè)session時(shí)鸠蚪,服務(wù)器首先檢查這個(gè)客戶端的請(qǐng)求里是否已包含了一個(gè)session標(biāo)識(shí)(稱為session id)今阳,如果已包含則說(shuō)明以前已經(jīng)為此客戶端創(chuàng)建過(guò)session,服務(wù)器就按照session id把這個(gè)session檢索出來(lái)使用(檢索不到茅信,會(huì)新建一個(gè))盾舌,如果客戶端請(qǐng)求不包含session id,則為客戶端創(chuàng)建一個(gè)session并且生成一個(gè)與此session相關(guān)聯(lián)的session id蘸鲸,session id的值應(yīng)該是一個(gè)既不會(huì)重復(fù)妖谴,又不容易被找到規(guī)律以仿造的字符串,這個(gè)session id將被在本次響應(yīng)中返回給客戶端保存酌摇。保存這個(gè)session id的方式可以采用cookie膝舅,這樣在交互過(guò)程中瀏覽器可以自動(dòng)的按照規(guī)則把這個(gè)標(biāo)識(shí)發(fā)送給服務(wù)器。
二窑多、cookie和session的區(qū)別:
*1仍稀、cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上
2埂息、cookie不是很安全技潘,別人可以分析存放在本地的cookie并進(jìn)行cookie欺騙遥巴,考慮*到安全應(yīng)當(dāng)使用session
3、session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上享幽,當(dāng)訪問(wèn)增多铲掐,會(huì)比較占用你服務(wù)器的性能,考慮到減輕服務(wù)器性能方面值桩,應(yīng)當(dāng)使用cookie
4摆霉、單個(gè)cookie保存的數(shù)*據(jù)不能超過(guò)4K,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie
5奔坟、建議將登錄信息等重要信息存放為session携栋,其他信息如果需要保留,可以放在cookie中
6蛀蜜、session保存在服務(wù)器刻两,客戶端不知道其中的信心增蹭;cookie保存在客戶端滴某,服務(wù)器能夠知道其中的信息
7、session中保存的是對(duì)象滋迈,cookie中保存的是字符串
8霎奢、session不能區(qū)分路徑,同一個(gè)用戶在訪問(wèn)一個(gè)網(wǎng)站期間饼灿,所有的session在任何一個(gè)地方都可以訪問(wèn)到幕侠,而cookie中如果設(shè)置了路徑參數(shù),那么同一個(gè)網(wǎng)站中不同路徑下的cookie互相是訪問(wèn)不到的*
三碍彭、web Storage和Cookie的區(qū)別
Web Storage的概念和cookie相似晤硕,區(qū)別是它是為了更大容量存儲(chǔ)設(shè)計(jì)的,cookie的大小是受限的庇忌,并且每次請(qǐng)求一個(gè)新的頁(yè)面的時(shí)候cookie都會(huì)被發(fā)送過(guò)去舞箍,這樣無(wú)形中浪費(fèi)了帶寬,另外cookie還需要指定作用域皆疹,不可跨域調(diào)用疏橄。
除此之外,web storage擁有setItem,getItem,removeItem,clear等方法略就,不像cookie需要前端開(kāi)發(fā)者自己封裝setCookie捎迫,getCookie。
但是cookie也是不可或缺的表牢,cookie的作用是與服務(wù)器進(jìn)行交互窄绒,作為http規(guī)范的一部分而存在的,而web Storage僅僅是為了在本地“存儲(chǔ)”數(shù)據(jù)而生
sessionStorage崔兴、localStorage彰导、cookie都是在瀏覽器端存儲(chǔ)的數(shù)據(jù)浊闪,其中sessionStorage的概念很特別,引入了一個(gè)“瀏覽器窗口”的概念螺戳,sessionStorage是在同源的同窗口中搁宾,始終存在的數(shù)據(jù),也就是說(shuō)只要這個(gè)瀏覽器窗口沒(méi)有關(guān)閉倔幼,即使刷新頁(yè)面或進(jìn)入同源另一個(gè)頁(yè)面盖腿,數(shù)據(jù)仍然存在,關(guān)閉窗口后损同,sessionStorage就會(huì)被銷毀翩腐,同時(shí)“獨(dú)立”打開(kāi)的不同窗口,即使是同一頁(yè)面膏燃,sessionStorage對(duì)象也是不同的
Web Storage帶來(lái)的好處:
1茂卦、減少網(wǎng)絡(luò)流量:一旦數(shù)據(jù)保存在本地之后,就可以避免再向服務(wù)器請(qǐng)求數(shù)據(jù)组哩,因此減少不必要的數(shù)據(jù)請(qǐng)求等龙,減少數(shù)
據(jù)在瀏覽器和服務(wù)器間不必要的來(lái)回傳遞
2、快速顯示數(shù)據(jù):性能好伶贰,從本地讀數(shù)據(jù)比通過(guò)網(wǎng)絡(luò)從服務(wù)器上獲得數(shù)據(jù)快得多蛛砰,本地?cái)?shù)據(jù)可以及時(shí)獲得,再加上網(wǎng)
頁(yè)本身也可以有緩存黍衙,因此整個(gè)頁(yè)面和數(shù)據(jù)都在本地的話泥畅,可以立即顯示
3、臨時(shí)存儲(chǔ):很多時(shí)候數(shù)據(jù)只需要在用戶瀏覽一組頁(yè)面期間使用琅翻,關(guān)閉窗口后數(shù)據(jù)就可以丟棄了位仁,這種情況使用sessionStorage非常方便
四、瀏覽器本地存儲(chǔ)與服務(wù)器端存儲(chǔ)的區(qū)別
其實(shí)數(shù)據(jù)既可以在瀏覽器本地存儲(chǔ)方椎,也可以在服務(wù)器端存儲(chǔ)
瀏覽器可以保存一些數(shù)據(jù)聂抢,需要的時(shí)候直接從本地存取,sessionStorage辩尊、localStorage和cookie都是由瀏覽器存儲(chǔ)在本地的數(shù)據(jù)
服務(wù)器端也可以保存所有用戶的所有數(shù)據(jù)涛浙,但需要的時(shí)候?yàn)g覽器要向服務(wù)器請(qǐng)求數(shù)據(jù)。
1摄欲、服務(wù)器端可以保存用戶的持久數(shù)據(jù)轿亮,如數(shù)據(jù)庫(kù)和云存儲(chǔ)將用戶的大量數(shù)據(jù)保存在服務(wù)器端
2、服務(wù)器端也可以保存用戶的臨時(shí)會(huì)話數(shù)據(jù)胸墙,服務(wù)器端的session機(jī)制我注,如jsp的session對(duì)象,數(shù)據(jù)保存在服務(wù)器上迟隅,
實(shí)際上但骨,服務(wù)器和瀏覽器之間僅需傳遞session id即可励七,服務(wù)器根據(jù)session id找到對(duì)應(yīng)用戶的session對(duì)象,會(huì)話數(shù)據(jù)僅在一段時(shí)間內(nèi)有效奔缠,這個(gè)時(shí)間就是server端設(shè)置的session有效期
服務(wù)器端保存所有的用戶的數(shù)據(jù)掠抬,所以服務(wù)器端的開(kāi)銷較大,而瀏覽器端保存則把不同用戶需要的數(shù)據(jù)分別保存在用戶各自的瀏覽器中校哎,瀏覽器端一般只用來(lái)存儲(chǔ)小數(shù)據(jù)两波,而非服務(wù)可以存儲(chǔ)大數(shù)據(jù)或小數(shù)據(jù)服務(wù)器存儲(chǔ)數(shù)據(jù)安全一些,瀏覽器只適合存儲(chǔ)一般數(shù)據(jù)
五闷哆、sessionStorage腰奋、localStorage和cookie的區(qū)別
共同點(diǎn):都是保存在瀏覽器端、且同源的
區(qū)別:
1抱怔、cookie數(shù)據(jù)始終在同源的http請(qǐng)求中攜帶(即使不需要)劣坊,即cookie在瀏覽器和服務(wù)器間來(lái)回傳遞,而sessionStorage和localStorage不會(huì)自動(dòng)把數(shù)據(jù)發(fā)送給服務(wù)器屈留,僅在本地保存局冰。cookie數(shù)據(jù)還有路徑(path)的概念,可以限制cookie只屬于某個(gè)路徑下
2绕沈、存儲(chǔ)大小限制也不同锐想,cookie數(shù)據(jù)不能超過(guò)4K帮寻,同時(shí)因?yàn)槊看蝖ttp請(qǐng)求都會(huì)攜帶cookie乍狐、所以cookie只適合保存很小的數(shù)據(jù),如會(huì)話標(biāo)識(shí)固逗。sessionStorage和localStorage雖然也有存儲(chǔ)大小的限制浅蚪,但比cookie大得多,可以達(dá)到5M或更大
3烫罩、數(shù)據(jù)有效期不同惜傲,sessionStorage:僅在當(dāng)前瀏覽器窗口關(guān)閉之前有效;localStorage:始終有效贝攒,窗口或?yàn)g覽器關(guān)閉也一直保存盗誊,因此用作持久數(shù)據(jù);cookie:只在設(shè)置的cookie過(guò)期時(shí)間之前有效隘弊,即使窗口關(guān)閉或?yàn)g覽器關(guān)閉
4哈踱、作用域不同,sessionStorage不在不同的瀏覽器窗口中共享梨熙,即使是同一個(gè)頁(yè)面开镣;localstorage在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的
5咽扇、web Storage支持事件通知機(jī)制邪财,可以將數(shù)據(jù)更新的通知發(fā)送給監(jiān)聽(tīng)者
6陕壹、web Storage的api接口使用更方便
六、sessionStorage與頁(yè)面js數(shù)據(jù)對(duì)象的區(qū)別
頁(yè)面中一般的js對(duì)象的生存期僅在當(dāng)前頁(yè)面有效树埠,因此刷新頁(yè)面或轉(zhuǎn)到另一頁(yè)面這樣的重新加載頁(yè)面的情況糠馆,數(shù)據(jù)就不存在了
而sessionStorage只要同源的同窗口中,刷新頁(yè)面或進(jìn)入同源的不同頁(yè)面怎憋,數(shù)據(jù)始終存在榨惠,也就是說(shuō)只要瀏覽器不關(guān)閉,數(shù)據(jù)仍然存在