设置localStorage的过期时间
匿名 · 更新于 2019/6/19
/** * * @param key * @param value * @param exp 有效期 */ function mySetLocalStorage(key, value, exptime = 0) { var nowtime = new Date().getTime()/1000; // 获取当前时间 ,转换成JSON字符串序列 if(exptime == 0){ exptime = nowtime + 60*10; //默认10分钟有效期 } var valueDate = JSON.stringify({ val: value, exptime: exptime }); try { localStorage.setItem(key, valueDate); } catch(e) { /*if(e.name === 'QUOTA_EXCEEDED_ERR' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') { console.log("Error: 本地存储超过限制"); localStorage.clear(); } else { console.log("Error: 保存到本地存储失败"); }*/ // 兼容性写法 if(myIsQuotaExceeded(e)) { console.log("Error: 本地存储超过限制"); localStorage.clear(); } else { console.log("Error: 保存到本地存储失败"); } } } function myIsQuotaExceeded(e) { var quotaExceeded = false; if(e) { if(e.code) { switch(e.code) { case 22: quotaExceeded = true; break; case 1014: // Firefox if(e.name === 'NS_ERROR_DOM_QUOTA_REACHED') { quotaExceeded = true; } break; } } else if(e.number === -2147024882) { // IE8 quotaExceeded = true; } } return quotaExceeded; } function myGetLocalStorage(key) { if(localStorage.getItem(key)) { var vals = localStorage.getItem(key); // 获取本地存储的值 var dataObj = JSON.parse(vals); // 将字符串转换成JSON对象 // 如果(当前时间 - 存储的元素在创建时候设置的时间) > 过期时间 var isTimed = (new Date().getTime()/1000 - dataObj.exptime) > 0; if(isTimed) { console.log("存储已过期"); localStorage.removeItem(key); return null; } else { var newValue = dataObj.val; } return newValue; } else { return null; } } mySetLocalStorage('name', 'hello, world'); var localKey = myGetLocalStorage('name'); console.log(localKey);
