亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

給localStorage設置一個過期時間的方法分享

2024-05-06 16:46:44
字體:
來源:轉載
供稿:網友

思考點

在 web 開發中,我們知道 cookie、session、localStorage都可以保存用戶的數據,cookie的 domain、path 限制了 cookie 的跨域, 有數量和大小的限制,可以設置有效時間。 session是后臺在瀏覽器注入一個設置了 httponly 的不可讀取的 cookie , session data由后臺保存在數據庫或者內存中,在web中,session 是靠 cookie 作為唯一標示來實現的,也可以設置過期時間。 localStorage 是 H5 的數據存儲辦法, 也是有大小限制的,但是不可以設置過期時間。

從我們接觸前端起,第一個熟悉的存儲相關的Cookie或者來分析我們生活中密切相關的淘寶、物流、鬧鐘等事物來說起吧,

  • Cookie從你設置的時候,就會給個時間,不設置默認會話結束就過期;
  • 淘寶購物 從你下單付款起,就會給這件貨物設置一個收貨期限時間,過了這個時間自動認為你收貨(即訂單結束);
  • 鬧鐘 你設置的提醒時間,其實也就是它的過期時間;
  • 再比如與您每天切身相關的產品需求,過完需求,你給出的上線時間,也就是這個需求的過期時間;
  • 再通俗點講,您今年的生日過完到明年生日之間也是相當于設置了有效期時間;

以上種種,我們能得出一個結論任何一件事、一個行為動作,都有一個時間、一個節點,甚至我們可以黑localStorage,就是一個完善的API,為什么不能給一個設置過期的機制,因為sessionStorage、Cookie并不能滿足我們實際的需求。

實現思路

抱歉,黑localStorage不完善,有點夸張了,綜合上述的總結,問題就簡單了,給localStorage一個過期時間,一切就都so easy ?到底是不是,來看看具體的實現吧:

簡單回顧

//示例一:localStorage.setItem('test',1234567);let test = localStorage.getItem('test');console.log(typeof test, test);//示例二:localStorage['name'] = '蘇南';console.log(localStorage['name']);/*輸出:"1234567" ,'蘇南',這里要注意,1234567 存進去時是number 取出來就成string了*/

重寫 set(存入) 方法:

  • 首先有三個參數 key、value、expired ,分別對應 鍵、值、過期時間,
  • 過期時間的單位可以自由發揮,小時、分鐘、天都可以,
  • 注意點:存儲的值可能是數組/對象,不能直接存儲,需要轉換 JSON.stringify,
  • 這個時間如何設置呢?在這個值存入的時候在鍵(key)的基礎上擴展一個字段,如:key+'expires',而它的值為當前 時間戳 + expired過期時間

具體來看一下代碼 :

set(key, value, expired) { /* * set 存儲方法 * @ param {String} key 鍵 * @ param {String} value 值, * @ param {String} expired 過期時間,以分鐘為單位,非必須 * @ 由@IT·平頭哥聯盟-首席填坑官?蘇南 分享 */ let source = this.source; source[key] = JSON.stringify(value); if (expired){ source[`${key}__expires__`] = Date.now() + 1000*60*expired }; return value;}

重寫 get(獲取) 方法:

  • 獲取數據時,先判斷之前存儲的時間有效期,與當前的時間進行對比;
  • 但存儲時expired為非必須參數,所以默認為當前時間+1,即長期有效;
  • 如果存儲時有設置過期時間,且在獲取的時候發現已經小于當前時間戳,則執行刪除操作,并返回空值;
  • 注意點:存儲的值可能是數組/對象,取出后不能直接返回,需要轉換 JSON.parse,

具體來看一下代碼 :

get(key) { /* * get 獲取方法 * @ param {String} key 鍵 * @ param {String} expired 存儲時為非必須字段,所以有可能取不到,默認為 Date.now+1 * @ 由@IT·平頭哥聯盟-首席填坑官?蘇南 分享 */ const source = this.source, expired = source[`${key}__expires__`]||Date.now+1; const now = Date.now(); if ( now >= expired ) { this.remove(key); return; } const value = source[key] ? JSON.parse(source[key]) : source[key]; return value;}

重寫 remove(刪除) 方法:

刪除操作就簡單了,;

remove(key) { const data = this.source, value = data[key]; delete data[key]; delete data[`${key}__expires__`]; return value;}

優化點:

  • 記得上次有個同學,是這么評論的:「 刪除緩存能放到constructor里面執行么,放到get里面 不取就一直在那是不是不太好?」;
  • 為什么不用for in而是 for ? for in循環遍歷對象的屬性時,原型鏈上的所有屬性都將被訪問,解決方案:使用hasOwnProperty方法過濾或Object.keys會返回自身可枚舉屬性組成的數組;
class storage { constructor(props) { this.props = props || {} this.source = this.props.source || window.localStorage this.initRun(); } initRun(){ /* * set 存儲方法 * @ param {String} key 鍵 * @ param {String} value 值,存儲的值可能是數組/對象,不能直接存儲,需要轉換 JSON.stringify * @ param {String} expired 過期時間,以分鐘為單位 * @ 由@IT·平頭哥聯盟-首席填坑官?蘇南 分享 */ const reg = new RegExp("__expires__"); let data = this.source; let list = Object.keys(data); if(list.length > 0){ list.map((key,v)=>{ if( !reg.test(key )){  let now = Date.now();  let expires = data[`${key}__expires__`]||Date.now+1;  if (now >= expires ) {  this.remove(key);  }; }; return key; }); }; }}

總結:

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
红桃av永久久久| 亚洲欧美制服另类日韩| 日韩高清中文字幕| 欧美美最猛性xxxxxx| 日韩av网站电影| www.美女亚洲精品| 高跟丝袜一区二区三区| 日韩欧美在线一区| 国产97在线|亚洲| 亚洲欧美日韩综合| 久久伊人免费视频| 欧美成人合集magnet| 精品亚洲一区二区| 亚洲国产精品视频在线观看| 欧美特级www| 日本欧美爱爱爱| 欧美极品少妇xxxxⅹ免费视频| 欧美成人免费播放| 在线日韩第一页| 欧美黄色片免费观看| www.亚洲免费视频| 欧美午夜宅男影院在线观看| 亚洲美女av在线| 欧美精品激情视频| 亚洲国产精品久久精品怡红院| 国产成人一区二区三区小说| 久久夜精品va视频免费观看| 亚洲深夜福利网站| 狠狠躁夜夜躁人人躁婷婷91| 久久精品国产免费观看| 热草久综合在线| 91嫩草在线视频| 久久久久久一区二区三区| 视频在线一区二区| 日韩av中文在线| 亚洲一区二区少妇| 精品在线观看国产| 992tv在线成人免费观看| 中国日韩欧美久久久久久久久| 久久久精品在线| 国产精品极品美女在线观看免费| 欧美激情久久久久久| 国产成人高潮免费观看精品| 国产精品一区二区三区免费视频| 久久av资源网站| 国产91九色视频| 亚洲精品白浆高清久久久久久| 日韩在线观看网址| 黄网动漫久久久| 久久久之久亚州精品露出| 国产日韩欧美夫妻视频在线观看| 国产精品久久久久久久av大片| 欧美亚洲另类制服自拍| 国产精品96久久久久久| 欧美裸身视频免费观看| 久操成人在线视频| 亚洲色图17p| 亚洲91精品在线| 国产精品国内视频| 亚洲欧美另类国产| 欧美日韩久久久久| 98精品国产自产在线观看| 在线观看日韩www视频免费| 91精品久久久久久久久| 97在线看免费观看视频在线观看| 国产精品成人av在线| 日韩中文av在线| 亚洲第一精品自拍| 欧洲永久精品大片ww免费漫画| 欧美精品一区二区免费| 欧美裸体xxxx极品少妇| 久久久999成人| 久久久999精品视频| 欧美黑人性生活视频| 欧美在线观看视频| 色阁综合伊人av| 国模私拍一区二区三区| 日韩亚洲成人av在线| 精品福利一区二区| 日韩精品免费在线视频观看| 九九热最新视频//这里只有精品| 伊人伊成久久人综合网站| 日韩精品在线免费播放| 亚洲免费视频网站| 国产日韩欧美自拍| 欧美激情精品久久久久久黑人| 日本亚洲欧洲色α| 久久久噜噜噜久久| 日本亚洲欧美成人| 国产啪精品视频网站| 国产成人福利夜色影视| 91精品国产91久久久久久最新| 欧美亚洲成人网| 国产精品久久久久av免费| 91丝袜美腿美女视频网站| 情事1991在线| 国产精品网站大全| 国产91色在线| 国内精品久久久久久影视8| www.欧美精品一二三区| 日韩精品视频观看| 国产裸体写真av一区二区| 国产精品久久久久久久久久久久| 欧美一级免费看| 久久久久久久香蕉网| 2019最新中文字幕| 日韩av成人在线观看| 久久精品久久久久| 久热精品视频在线观看一区| 亚洲性av网站| 热re99久久精品国产66热| 欧美中在线观看| 亚洲成色777777在线观看影院| 91系列在线播放| 国产精品啪视频| 美日韩精品免费视频| 国产一区深夜福利| 亚洲国产高清高潮精品美女| 欲色天天网综合久久| 国产精品99蜜臀久久不卡二区| 91色中文字幕| 少妇高潮久久77777| 日韩最新中文字幕电影免费看| 欧美极品少妇xxxxⅹ免费视频| 51视频国产精品一区二区| 欧美性生交大片免费| 国产精品福利小视频| 国产精品一区二区三区免费视频| 国产中文字幕日韩| 91禁外国网站| 久久成人精品电影| 久久频这里精品99香蕉| 亚洲男人的天堂在线播放| 国产精品大片wwwwww| 91精品国产九九九久久久亚洲| 国产一区二区三区高清在线观看| 久久久国产一区| 亚洲精品国产精品自产a区红杏吧| 日韩av综合中文字幕| 国产一区二区三区在线播放免费观看| 日韩少妇与小伙激情| 免费不卡欧美自拍视频| 亚洲图片在线综合| 日韩国产欧美精品一区二区三区| 国产免费一区视频观看免费| 91精品国产自产在线老师啪| 欧美日韩在线观看视频| 亚洲天堂成人在线| 国产精品日韩久久久久| 韩国三级日本三级少妇99| 久久福利视频导航| 久久国产精品久久国产精品| 美女国内精品自产拍在线播放| 亚洲久久久久久久久久久| 大胆人体色综合| 亚洲成年网站在线观看| 亚洲免费人成在线视频观看| 久久久精品国产一区二区| 国产精品久久二区| 亚洲自拍偷拍区| 亚洲人成网站色ww在线| 日韩二区三区在线| 日韩高清电影好看的电视剧电影| 日本不卡视频在线播放|