2015-06-10 120 views
0

現在我正在使用會話存儲來存儲登錄時的用戶信息。如預期的那樣,甚至在頁面刷新後會話變量仍然存在。如預期的那樣關閉窗口並重新登錄後,會話存儲變量不再存在。但是,如果用戶使用CTRL + F5刷新,清除緩存,則會話存儲變量將保留,但它們會清空。AngularJS:sessionStorage變量在完全緩存清除時沒有被清除

這對我來說很糟糕,原因之一是:我的一個會話變量是一個布爾值,它重置爲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; 
     } 
} 

我一直在尋找一種方式,當檢測到按鍵的組合來設置布爾爲假,但是這聽起來像一個非常骯髒的解決方案。

編輯:我唯一想到的其他事情就是簡單地對Angular中的變量進行每次檢查,因此我正在檢查false而不是true,但是 - 再次 - 聽起來像是一個骯髒的解決方案。

回答

0

而不是使用一個布爾只需切換到一個int與0或1。您的值檢查會有點不同,但0/1大概可以讓你相同的結果爲假/真

而且,當你說空出來,我假設你的意思是他們未初始化?

+0

它們已初始化,只需使用空值。我認爲你的解決方案可能是唯一的。 – mitbanip

+0

用你自己的語言,我認爲這不一定是一個乾淨的解決方案。 – skeletalbassman