對(duì)于我們?cè)陂_發(fā)中常常使用的數(shù)據(jù)存儲(chǔ)方法有這么三種cookie sessionstorage localstorage 那么今天我們就來說說“對(duì)于cookie、sessionstorage和 localstorage 三種數(shù)據(jù)存儲(chǔ)的差異總結(jié)!”這方面的內(nèi)容吧!
一、通常我們?cè)诖鎯?chǔ)數(shù)據(jù)的方式有三種
cookie sessionstorage localstorage ,那么這三種數(shù)據(jù)的存儲(chǔ)又有什么關(guān)系呢?讓我們一起來看看吧
cookie:保存cookie值:
var dataCookie='110';
document.cookie = 'token' + "=" +dataCookie;
獲取指定名稱的cookie值:
function getCookie(name)
{ //獲取指定名稱的cookie值
// (^| )name=([^;]*)(;|$),match[0]為與整個(gè)正則表達(dá)式匹配的字符串,match[i]為正則表達(dá)式捕獲數(shù)組相匹配的數(shù)組;
var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
if(arr != null) {
console.log(arr);
return unescape(arr[2]);
}
return null;
}
var cookieData=getCookie('token'); //cookie賦值給變量。
設(shè)置cookie過期時(shí)間:
function setTime()
{
//存儲(chǔ)cookie值并且設(shè)置cookie過期時(shí)間
var date=new Date();
var expiresDays=10;//設(shè)置十天過期
date.setTime(date.getTime()+expiresDays*24*3600*1000);
document.cookie="userId=828;
expires="+date.toGMTString();
console.log(document.cookie,'存儲(chǔ)cookie值并且設(shè)置cookie過期時(shí)間');
}
刪除cookie:
function delCookie(cookieName1) {
//刪除cookie
var date2=new Date();
date2.setTime(date2.getTime()-10001);//把時(shí)間設(shè)置為過去的時(shí)間,會(huì)自動(dòng)刪除
document.cookie= cookieName1+"=v; expires="+date2.toGMTString();
console.log(document.cookie,'刪除cookie');
}
delCookie('userId');
localStorage和sessionStorage:localStorage和sessionStorage所使用的方法是一樣的,下面以sessionStorage為栗子:
var name='sessionData';
var num=120;
sessionStorage.setItem(name,num);//存儲(chǔ)數(shù)據(jù)
sessionStorage.setItem('value2',119);
let dataAll=sessionStorage.valueOf();//獲取全部數(shù)據(jù)
console.log(dataAll,'獲取全部數(shù)據(jù)');
var dataSession=sessionStorage.getItem(name);//獲取指定鍵名數(shù)據(jù)
var dataSession2=sessionStorage.sessionData;//sessionStorage是js對(duì)象,也可以使用key的方式來獲取值
console.log(dataSession,dataSession2,'獲取指定鍵名數(shù)據(jù)');
sessionStorage.removeItem(name); //刪除指定鍵名數(shù)據(jù)
console.log(dataAll,'獲取全部數(shù)據(jù)1');
sessionStorage.clear();//清空緩存數(shù)據(jù):localStorage.clear();
console.log(dataAll,'獲取全部數(shù)據(jù)2');
三者的異同:
上面的使用方式說好了,下面就嘮嘮三者之間的區(qū)別,這個(gè)問題其實(shí)很多大廠面試的時(shí)候也都會(huì)問到,所以可以注意一下這幾個(gè)之間的區(qū)別。
生命周期:
cookie:可設(shè)置失效時(shí)間,沒有設(shè)置的話,默認(rèn)是關(guān)閉瀏覽器后失效
localStorage:除非被手動(dòng)清除,否則將會(huì)永久保存。
sessionStorage: 僅在當(dāng)前網(wǎng)頁會(huì)話下有效,關(guān)閉頁面或?yàn)g覽器后就會(huì)被清除。
存放數(shù)據(jù)大小:
cookie:4KB左右
localStorage和sessionStorage:可以保存5MB的信息。
http請(qǐng)求:
cookie:每次都會(huì)攜帶在HTTP頭中,如果使用cookie保存過多數(shù)據(jù)會(huì)帶來性能問題
localStorage和sessionStorage:僅在客戶端(即瀏覽器)中保存,不參與和服務(wù)器的通信
易用性:
cookie:需要程序員自己封裝,源生的Cookie接口不友好
localStorage和sessionStorage:源生接口可以接受,亦可再次封裝來對(duì)Object和Array有更好的支持
應(yīng)用場(chǎng)景:
從安全性來說,因?yàn)槊看蝖ttp請(qǐng)求都會(huì)攜帶cookie信息,這樣無形中浪費(fèi)了帶寬,所以cookie應(yīng)該盡可能少的使用,另外cookie還需要指定作用域,不可以跨域調(diào)用,限制比較多。但是用來識(shí)別用戶登錄來說,cookie還是比stprage更好用的。其他情況下,可以使用storage,就用storage。
storage在存儲(chǔ)數(shù)據(jù)的大小上面秒殺了cookie,現(xiàn)在基本上很少使用cookie了,因?yàn)楦罂偸歉玫模銈兌谩?/p>
localStorage和sessionStorage唯一的差別一個(gè)是永久保存在瀏覽器里面,一個(gè)是關(guān)閉網(wǎng)頁就清除了信息。localStorage可以用來夸頁面?zhèn)鬟f參數(shù),sessionStorage用來保存一些臨時(shí)的數(shù)據(jù),防止用戶刷新頁面之后丟失了一些參數(shù)。
瀏覽器支持情況:
localStorage和sessionStorage是html5才應(yīng)用的新特性,可能有些瀏覽器并不支持,這里要注意。
cookie的瀏覽器支持沒有找到,可以通過下面這段代碼來判斷所使用的瀏覽器是否支持cookie:
if(navigator.cookieEnabled)
{
alert("你的瀏覽器支持cookie功能");//提示瀏覽器支持cookie
}
else
{
alert("你的瀏覽器不支持cookie");//提示瀏覽器不支持cookie
}
復(fù)制代碼數(shù)據(jù)存放處:Cookie、localStorage、sessionStorage數(shù)據(jù)存放處
番外:各瀏覽器Cookie大小、個(gè)數(shù)限制。
總結(jié)
在觀看完這篇有關(guān)于:“對(duì)于cookie、sessionstorage和 localstorage 三種數(shù)據(jù)存儲(chǔ)的差異總結(jié)!”這方面的相關(guān)內(nèi)容,相信很多小伙伴們對(duì)于數(shù)據(jù)存儲(chǔ)方法也有了不一樣的看法和見解,那更多相關(guān)的內(nèi)容我們都可以在W3Cschool進(jìn)行學(xué)習(xí)!