思考點
創(chuàng)新互聯(lián)建站主要從事網(wǎng)站設計制作、成都網(wǎng)站制作、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務羅定,10年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:028-86922220
在 web 開發(fā)中,我們知道 cookie、session、localStorage都可以保存用戶的數(shù)據(jù),cookie的 domain、path 限制了 cookie 的跨域, 有數(shù)量和大小的限制,可以設置有效時間。 session是后臺在瀏覽器注入一個設置了 httponly 的不可讀取的 cookie , session data由后臺保存在數(shù)據(jù)庫或者內(nèi)存中,在web中,session 是靠 cookie 作為唯一標示來實現(xiàn)的,也可以設置過期時間。 localStorage 是 H5 的數(shù)據(jù)存儲辦法, 也是有大小限制的,但是不可以設置過期時間。
從我們接觸前端起,第一個熟悉的存儲相關(guān)的Cookie或者來分析我們生活中密切相關(guān)的淘寶、物流、鬧鐘等事物來說起吧,
以上種種,我們能得出一個結(jié)論任何一件事、一個行為動作,都有一個時間、一個節(jié)點,甚至我們可以黑localStorage,就是一個完善的API,為什么不能給一個設置過期的機制,因為sessionStorage、Cookie并不能滿足我們實際的需求。
實現(xiàn)思路
抱歉,黑localStorage不完善,有點夸張了,綜合上述的總結(jié),問題就簡單了,給localStorage一個過期時間,一切就都so easy ?到底是不是,來看看具體的實現(xiàn)吧:
簡單回顧
//示例一: 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(存入) 方法:
具體來看一下代碼 :
set(key, value, expired) { /* * set 存儲方法 * @ param {String} key 鍵 * @ param {String} value 值, * @ param {String} expired 過期時間,以分鐘為單位,非必須 * @ 由@IT·平頭哥聯(lián)盟-首席填坑官∙蘇南 分享 */ let source = this.source; source[key] = JSON.stringify(value); if (expired){ source[`${key}__expires__`] = Date.now() + 1000*60*expired }; return value; }
重寫 get(獲取) 方法:
具體來看一下代碼 :
get(key) { /* * get 獲取方法 * @ param {String} key 鍵 * @ param {String} expired 存儲時為非必須字段,所以有可能取不到,默認為 Date.now+1 * @ 由@IT·平頭哥聯(lián)盟-首席填坑官∙蘇南 分享 */ 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; }
優(yōu)化點:
class storage { constructor(props) { this.props = props || {} this.source = this.props.source || window.localStorage this.initRun(); } initRun(){ /* * set 存儲方法 * @ param {String} key 鍵 * @ param {String} value 值,存儲的值可能是數(shù)組/對象,不能直接存儲,需要轉(zhuǎn)換 JSON.stringify * @ param {String} expired 過期時間,以分鐘為單位 * @ 由@IT·平頭哥聯(lián)盟-首席填坑官∙蘇南 分享 */ 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; }); }; } }
總結(jié):
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對創(chuàng)新互聯(lián)的支持。
網(wǎng)頁名稱:給localStorage設置一個過期時間的方法分享
本文來源:http://www.rwnh.cn/article10/jipddo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供域名注冊、網(wǎng)站導航、網(wǎng)站建設、ChatGPT、外貿(mào)網(wǎng)站建設、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)