js 设置有效的localStorage

复制代码
/**
 * 设置有时效的localStorage
 * @调用:setSessionStorage('access_token', '123456', 5000);
 * @调用:getSessionStorage('access_token');
 */
export function setLocalStorage(key, value, expires) {
    let params = { key: key, value: value, expires: expires};
    if (expires) {
        // 记录何时将值存入缓存,毫秒级
        let data = Object.assign(params, { startTime: new Date().getTime() });
        localStorage.setItem(key, JSON.stringify(data));
    } else {
        if (Object.prototype.toString.call(value) == '[object Object]') {
            value = JSON.stringify(value);
        }
        if (Object.prototype.toString.call(value) == '[object Array]') {
            value = JSON.stringify(value);
        }
        localStorage.setItem(key, value);
    }
}
// 获取有时效的sessionStorage
export function getLocalStorage(key) {
    let item = localStorage.getItem(key);
    // 先将拿到的试着进行json转为对象的形式
    try {
        item = JSON.parse(item);
    } catch (error) {
        // eslint-disable-next-line no-self-assign
        item = item;
    }
    // 如果有startTime的值,说明设置了失效时间
    if (item && item.startTime) {
        let date = new Date().getTime();
        // 如果大于就是过期了,如果小于或等于就还没过期
        if (date - item.startTime > item.expires) {
            localStorage.removeItem(key);
            return '';
        } else {
            return item.value;
        }
    } else {
        return item;
    }
}
复制代码

 

posted @   expworld  阅读(387)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示