html5 的 localStorage 可否设置数据的时效时间?

html5 的 localStorage 用于存储一些临时的离线数据,当超过一定时间后,我希望清除这些数据防止爆仓,有什么好方法吗?

阅读 37k
7 个回答
if (+new Date() > +new Date(2014, 11, 30)) {
    localStorage.removeItem("c");    //清除c的值
    // or localStorage.clear();
}

不过有一点,请不要用localStorage保存机密数据,即便你已加密,也不安全哟~

localStorage本身不带时效的,你可以自己存储一个cache time然后判断一下就好了。

html5 的 localStorage 用于存储一些临时的离线数据

localStorage 和 file、database 一样,是存储,有永久性质。

你存入数据库的数据,不会在某一天突然被删除了。

你保存到硬盘里面的文件,也不会再某一天突然消失了。

所以,localStorage 本身没有时效性,因为 storage 毕竟不是 ceche。

因此,只能用 js 手动清除了。

那么现在问题来了,js 是客户端脚本,也就是说,只有用户在浏览这个网页的时候,才可能运行 js 脚本来清除,如果用户不再访问本网站,那怎么清除呢?

没有办法清除。

localStorage 是持久化的存储,不是缓存级别的,和sqllite一样,所以也就不存在什么超时时间的概念。只能手动清除,可以自己写一些业务逻辑去判断在什么时机清除

使用locache这个是localStorage的插件可以使用它定义的接口设置过期时间

em 好像无法解决题主的爆仓问题,只能实现时效功能,还是贴在这里做个参考吧


简单一点写两个方法就好了

        /**
       * 设置cookie
       * @param {[type]} key   [键名]
       * @param {[type]} value [键值]
       * @param {[type]} days  [保存的时间(天)]
       */
      setCookie: function (key, value, days) {
        // 设置过期原则
        if (!value) {
          localStorage.removeItem(key)
        } else {
          var Days = days || 7; // 默认保留7天
          var exp = new Date();
          localStorage[key] = JSON.stringify({
            value,
            expires: exp.getTime() + Days * 24 * 60 * 60 * 1000
          })
        }
      },
      getCookie: function (name) {
        try {
          let o = JSON.parse(localStorage[name])
          if (!o || o.expires < Date.now()) {
            return null
          } else {
            return o.value
          }
        } catch (e) {
            // 兼容其他localstorage 
          console.log(e)
          return localStorage[name]
        } finally {
        }
      },
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题