【问题标题】:AngularJS: sessionStorage variables not erased upon full cache clearAngularJS:sessionStorage 变量在完全清除缓存时不会被删除
【发布时间】:2015-06-11 03:27:55
【问题描述】:

现在我正在使用会话存储在登录时存储用户信息。正如预期的那样,会话变量即使在页面刷新后仍然存在。当您按预期关闭窗口并重新登录时,会话存储变量不再存在。但是,如果用户使用 CTRL + F5 刷新,清除缓存,会话存储变量确实会保留,但它们会清空。

这对我来说很糟糕,原因只有一个:我的会话变量之一是布尔值,它重置为 true,而除非他们已登录,否则它肯定应该为 false。解决此问题的方法是什么?请在尝试给我一个涉及 sessionStorage 以外的任何内容的答案之前,请相信我,我没有选择使用它。

    .factory('Session',['$window', function ($window){
      memorizeLogged : function(val) {
            try { 
                if($window.Storage){
            $window.sessionStorage.setItem('LoggedIn',       
            $window.JSON.stringify(val));
            return true;
          } else {
            return false;
          }
        } catch(error){
          console.error(error, error.message);
        }
        return false;
      },

      isLogged: function(){
            try {
                if($window.Storage){
            return 
          $window.JSON.parse($window.sessionStorage.getItem('LoggedIn'));
          } else {
            return false;
          }
        } catch(error){
          console.error(error, error.message);
        }
        return false;
      }
 }

我一直在寻找一种在检测到按键组合时将布尔值设置为 false 的方法,但这听起来是一个非常肮脏的解决方案。

编辑:我唯一想到的另一件事就是简单地对 Angular 中的变量进行每次检查,所以我检查的是假而不是真,但这 - 再一次 - 听起来像一个肮脏的解决方案。

【问题讨论】:

    标签: angularjs session caching


    【解决方案1】:

    不要使用布尔值,只需切换到具有 0 或 1 的 int。您的值检查会有些不同,但 0/1 可能会得到与 false/true 相同的结果

    另外,当您说清空时,我假设您的意思是它们未初始化?

    【讨论】:

    • 它们被初始化,只是用空值。我认为您的解决方案可能是唯一的。
    • 用你自己的语言,我认为不一定会有一个干净的解决方案。
    猜你喜欢
    • 2011-01-28
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多