温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么实现localStorage的过期机制

发布时间:2022-03-01 09:23:23 来源:亿速云 阅读:249 作者:iii 栏目:开发技术

今天小编给大家分享一下怎么实现localStorage的过期机制的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    cookie过期机制

    我们知道Expires和Max-age都可以设置cookie的过期时间,那么两者存在什么样的异同点呢?

    expires和max-age的区别

    Expires 设置的是绝对值,即直接设置当前cookie在什么时候过期。 就像下面图中的这样, GMT格式。

    怎么实现localStorage的过期机制

    • Expires在HTTP/1.0中已经定义

    • max-age在HTTP/1.1中才有定义,为了向下兼容,仅使用max-age不够;

    Expires 设置一个绝对值,至少会带来两个方面的问题:

    • 客户端和服务端时间不同步的问题。往往表现为时区不同、客户端时间可被用户自由修改。

    • 很容易在配置后忘记具体的过期时间,导致过期来临出现浪涌现象(我的理解应该是同时大批量更新的问题)。

    Max-Age代表存活时间,记录的是一个相对时间(例如 6000s),起始时间点是服务器记录的requet-time。

    我们看到除了上面提到的两个值,还有 session, 这个值代表的意思就是在当前连接下,关闭浏览器窗口、断开与服务连接,该数据即失效。

    怎么实现localStorage的过期机制

    localStorage 数据过期

    localstorage本身是没有过期机制的,不过我们可以通过其他手段来扩展,使其能够满足我们的数据过期的需求。

    需求分析:

    • 存入数据时,顺带传入过去时间;

    • 获取数据时,判断当前是否过期,过期返回 undefined; 否则正常返回数据。

    动手实践

    localStorage 和 sessionStorage 都继承自 Storage 对象, 所以我们可以扩展Storage原型方法。

    setStorageWithAge(key, value, age) 方法, 接收三个参数,第三个参数代表最大过期时间,我们这里参考 cookie的 Max-Age 的实现,用相对时间来做。

    getStorageWithAge(key),内部直接判断时间是否过期来返回对应的值。

    代码实现:

    Storage.prototype.setStorageWithAge = (key, value, age) => {
        if (isNaN(age) || age < 1) throw new Error("age must be a number");
        const obj = {
            data: value, //存储值
            time: Date.now(), //存值时间戳
            maxAge: age, //过期时间
        };
        localStorage.setItem(key, JSON.stringify(obj));
    };
    
    Storage.prototype.getStorageWithAge = key => {
        const { data, time, maxAge } = JSON.parse(localStorage.getItem(key));
        if (time + maxAge < Date.now()) {
            localStorage.removeItem(key);
            return undefined;
        }
        return data;
    };

    尝试调用:

    localStorage.setStorageWithAge('amingxiansen', '测试过期时间', 30000);
    localStorage.getStorageWithAge('amingxiansen');

    怎么实现localStorage的过期机制

    设定30s的过期时间,过期之前和过期之后获取到的结果。

    以上就是“怎么实现localStorage的过期机制”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI