開門見山看需求:使用 localStorage封裝一個(gè) Storage 對(duì)象,達(dá)到如下效果:
Storage.set('name', '饑人谷')
Storage.set('age', 2, 30) ; //設(shè)置 name 字段存儲(chǔ)的值為'饑人谷'
Storage.set('teachers', ['ruoyu', 'fangfang', 'tom'], 60)
Storage.get('name') // ‘饑人谷’
Storage.get('age') // 如果不超過30秒,返回?cái)?shù)字類型的2;如果超過30秒,返回 undefined,并且 localStorage 里清除 age 字段
Storage.get('teachers') //如果不超過60秒,返回?cái)?shù)組; 如果超過60秒,返回undefined
var Storage = (function(){ //函數(shù)包括set和get功能
return {
set: function(key, value, expireSeconds){ //三個(gè)參數(shù),value為返回值,用來判斷是否超過時(shí)間?第三個(gè)參數(shù)為有效時(shí)間
localStorage[key] = JSON.stringify({ //存儲(chǔ)格式為字符串,stringify轉(zhuǎn)格式
value: value,
expired: expireSeconds===undefined?undefined:Date.now() + 1000*expireSeconds //沒有設(shè)置時(shí)間為undefined,設(shè)置事件為現(xiàn)在的事件加上有效時(shí)長(zhǎng)
})
},
get: function(key){ //沒有存儲(chǔ)內(nèi)容不返回值
if(localStorage[key] === undefined){
return
}
var o = JSON.parse(localStorage[key])
if(o.expired === undefined || Date.now() < o.expired){
return o.value
}else{
delete localStorage[key] //JSON.parse格式轉(zhuǎn)換回來,進(jìn)行判斷,如果沒有設(shè)置時(shí)間或者在有效時(shí)間內(nèi),返回value;否則超過時(shí)間就刪除內(nèi)容
}
}
}
})()
cookie & session &localStorage 分別是什么?
1.cookie是存儲(chǔ)在瀏覽器上的一小段數(shù)據(jù),用來記錄某些當(dāng)頁面關(guān)閉或者刷新后仍然需要記錄的信息;
2.session是一次瀏覽器和服務(wù)器的交互的會(huì)話,第一次訪問時(shí),服務(wù)器會(huì)創(chuàng)建一個(gè)新的sesion,并且把session的Id以cookie的形式發(fā)送給客戶端瀏覽器,session信息存在于服務(wù)器端
3.localStorage ,webstorage特性的API之一,用于將大量數(shù)據(jù)(最大5M)保存在瀏覽器中,保存后數(shù)據(jù)永遠(yuǎn)存在不會(huì)失效過期,除非用 js手動(dòng)清除。