<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網 責編:小采 時間:2020-11-27 22:05:27
        文檔

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

        給localStorage設置一個過期時間的方法分享:思考點 在 web 開發中,我們知道 cookie、session、localStorage都可以保存用戶的數據,cookie的 domain、path 限制了 cookie 的跨域, 有數量和大小的限制,可以設置有效時間。 session是后臺在瀏覽器注入一個設置了 httponly 的不可讀取的 c
        推薦度:
        導讀給localStorage設置一個過期時間的方法分享:思考點 在 web 開發中,我們知道 cookie、session、localStorage都可以保存用戶的數據,cookie的 domain、path 限制了 cookie 的跨域, 有數量和大小的限制,可以設置有效時間。 session是后臺在瀏覽器注入一個設置了 httponly 的不可讀取的 c

        思考點

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

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

      1. Cookie從你設置的時候,就會給個時間,不設置默認會話結束就過期;
      2. 淘寶購物 從你下單付款起,就會給這件貨物設置一個收貨期限時間,過了這個時間自動認為你收貨(即訂單結束);
      3. 鬧鐘 你設置的提醒時間,其實也就是它的過期時間;
      4. 再比如與您每天切身相關的產品需求,過完需求,你給出的上線時間,也就是這個需求的過期時間;
      5. 再通俗點講,您今年的生日過完到明年生日之間也是相當于設置了有效期時間;
      6. 以上種種,我們能得出一個結論任何一件事、一個行為動作,都有一個時間、一個節點,甚至我們可以黑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(存入) 方法:

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

        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(獲取) 方法:

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

        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;
        }

        優化點:

      17. 記得上次有個同學,是這么評論的:「 刪除緩存能放到constructor里面執行么,放到get里面 不取就一直在那是不是不太好?」;
      18. 為什么不用for in而是 for ? for in循環遍歷對象的屬性時,原型鏈上的所有屬性都將被訪問,解決方案:使用hasOwnProperty方法過濾或Object.keys會返回自身可枚舉屬性組成的數組;
      19. 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;
         });
         };
         }
        }

        總結:

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

        給localStorage設置一個過期時間的方法分享:思考點 在 web 開發中,我們知道 cookie、session、localStorage都可以保存用戶的數據,cookie的 domain、path 限制了 cookie 的跨域, 有數量和大小的限制,可以設置有效時間。 session是后臺在瀏覽器注入一個設置了 httponly 的不可讀取的 c
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲AV日韩AV永久无码下载| 免费一级毛片在级播放| 亚洲AV电影院在线观看| 在线免费观看h片| 久久久久亚洲AV成人网| 最近更新免费中文字幕大全| 亚洲熟妇丰满多毛XXXX| 国内少妇偷人精品视频免费| 亚洲av无码一区二区三区网站| 日韩免费观看一区| 亚洲一区二区三区国产精品无码| 成年女人毛片免费视频| 色偷偷亚洲第一综合| 亚洲欧洲国产成人综合在线观看 | 无码国产精品一区二区免费式芒果 | 成人网站免费看黄A站视频| 国产精品亚洲аv无码播放| 中文字幕成人免费视频| 亚洲视频在线观看2018| 国产免费久久精品久久久| WWW免费视频在线观看播放| 99ri精品国产亚洲| 国产精品jizz在线观看免费| 一级女性全黄久久生活片免费| 亚洲免费观看视频| 免费人成网站在线观看10分钟| 亚洲成在人线在线播放无码 | 国产a级特黄的片子视频免费| 亚欧洲精品在线视频免费观看| 亚洲乱亚洲乱淫久久| 国产色爽女小说免费看| 99精品免费视频| 亚洲一区二区三区久久| 亚洲男人在线无码视频| 91精品国产免费久久久久久青草| 美女黄频免费网站| 亚洲精品91在线| 中文字幕亚洲激情| 国产一精品一AV一免费孕妇| 在线观看免费黄网站| 中国亚洲呦女专区|