localStorage設定過期時間
眾所周知,前端三大快取,cookie,sessionStorage,localStorage,cookie空間太小,一旦大了,會消耗流量,只適合存一些登入會話資訊,而sessionStorage的過期時間就是關閉瀏覽器,是個臨時會話視窗,但是,最近這個差點把我坑了,就是sessionStorage只能在同一標籤下共享,加入你把網址複製貼上到新開啟的標籤頁裡面,你會驚喜的發現,what?居然不共享,這不坑爹呢嗎?咳咳。。還有就是localStorage了,這個好處就是儲存空間大,長時間儲存,同一瀏覽器,標籤頁全部共享,它是直接存到電腦硬碟上的,不好的是,它是永久有效的,除非手動改清除,否則它會在你電腦裡待上一輩子,供他吃好的喝好的,也就是無法設定失效時間,但是我還真不服了,憑什麼我用你就得養你一輩子,哼哼,於是我就自己簡單封裝一下,讓它可以設定失效時間,下面我們用ES6的類來封裝
class Storage{
constructor(name){
this.name = 'storage';
}
//設定快取
setItem(params){
let obj = {
name:'',
value:'',
expires:"",
startTime:new Date().getTime()//記錄何時將值存入快取,毫秒級
}
let options = {};
//將obj和傳進來的params合併
Object.assign(options,obj,params);
if(options.expires){
//如果options.expires設定了的話
//以options.name為key,options為值放進去
localStorage.setItem(options.name,JSON.stringify(options));
}else{
//如果options.expires沒有設定,就判斷一下value的型別
let type = Object.prototype.toString.call(options.value);
//如果value是物件或者陣列物件的型別,就先用JSON.stringify轉一下,再存進去
if(Object.prototype.toString.call(options.value) == '[object Object]'){
options.value = JSON.stringify(options.value);
}
if(Object.prototype.toString.call(options.value) == '[object Array]'){
options.value = JSON.stringify(options.value);
}
localStorage.setItem(options.name,options.value);
}
}
//拿到快取
getItem(name){
let item = localStorage.getItem(name);
//先將拿到的試著進行json轉為物件的形式
try{
item = JSON.parse(item);
}catch(error){
//如果不行就不是json的字串,就直接返回
item = item;
}
//如果有startTime的值,說明設定了失效時間
if(item.startTime){
let date = new Date().getTime();
//何時將值取出減去剛存入的時間,與item.expires比較,如果大於就是過期了,如果小於或等於就還沒過期
if(date - item.startTime > item.expires){
//快取過期,清除快取,返回false
localStorage.removeItem(name);
return false;
}else{
//快取未過期,返回值
return item.value;
}
}else{
//如果沒有設定失效時間,直接返回值
return item;
}
}
//移出快取
removeItem(name){
localStorage.removeItem(name);
}
//移出全部快取
clear(){
localStorage.clear();
}
}以上就是全部程式碼了,diamagnetic說明我全部寫在註釋裡了,我封裝的這個還有個好處就是,你存進去是什麼型別的值,取出來還是什麼型別的值,比如你存進去是個物件,取出來還是個物件,用不著轉型別了,大家都知道快取只支援字串型別的資料,但是我這裡面已經幫你做好了封裝,你只管存和取就可以了,下面我們來試試效果
設定失效時間
let storage = new Storage();
storage.setItem({
name:"name",
value:"前端Owen"
})
let value = storage.getItem('name');
console.log('我是value',value);
下面我們檢驗存進去的型別和取出來的型別
普通字串以上已經試過了,現在試試物件
storage.setItem({
name:"name",
value:{
name:"前端Owen",
skills:"聰明,帥氣"
},
})取出:
let value = storage.getItem('name');
console.log('我是value',value);
下面再試試陣列物件:storage.setItem({
name:"name",
value:[
{
name:"前端林三哥",
skills:"聰明,帥氣"
},
{
name:"前端林小二",
skills:"聰明,帥氣,窮"
}
],
})
相關文章
- 如何給localStorage設定一個過期時間?
- localStorage設定儲存時間
- redis設定過期時間Redis
- JavaScript 設定cookie 過期時間JavaScriptCookie
- 設定phpsession過期時間PHPSession
- localstorage實現帶過期時間的快取功能快取
- JavaScript 設定Cookie過期時間無效JavaScriptCookie
- C#如何設定session過期時間C#Session
- C# 給PDF文件設定過期時間C#
- SAP過帳期間設定
- tomcat 設定session過期時間(四種方式)TomcatSession
- 通過offsets.retention.minutes設定kafkaoffset的過期時間Kafka
- 優雅的快取解決方案--設定過期時間快取
- 關於 session 未到設定的過期時間就過期的問題(分享坑點)Session
- redis 過期時間Redis
- Linux密碼過期時間設定 /etc/login.defsLinux密碼
- 面試官:RabbitMQ過期時間設定、死信佇列、延時佇列怎麼設計?面試MQ佇列
- httpsession過期時間HTTPSession
- Passport 設定token 過期時間盡然不生效!這是為什麼?Passport
- 定時拷貝加時間維的檔案和定時刪除過期檔案
- redis hset hmset過期時間Redis
- 檢視Cookie過期時間Cookie
- 設定有過期時間的廣告程式碼例項
- 登入過期--localStorage加sessionStorage實現7天登入過期Session
- RabbitMQ 高階 - 過期時間 TTLMQ
- JavaScript獲取cookie過期時間JavaScriptCookie
- 【Linux-時間設定】-設定時區並調整時間Linux
- Redis和DelayQueue設計具有過期時間的快取Redis快取
- 設定時間格式
- quartz定時任務時間設定quartz
- redis 設定過期時間,以資料夾形式展示key顯示快取資料Redis快取
- GitLab 中文版如何設定密碼長度、複雜度以及過期時間?Gitlab密碼複雜度
- JavaScript設定cookie立即過期JavaScriptCookie
- JavaScript設定cookie永不過期JavaScriptCookie
- Windows區域網通過NTP設定時間同步Windows
- 對於Redis中設定了過期時間的Key,你需要知道這些內容Redis
- [ASP.NET] 如果將快取“滑動過期時間”設定為1秒會怎樣?ASP.NET快取
- session超時時間的設定Session