2016-03-11 99 views
0

我的工作,我現在用的sessionStorage保持用戶登錄通過電子郵件是否與驗證令牌中的sessionStorage可檢查反應通量應用。如果它們可用並且登錄後的時間少於15分鐘,我會觸發一個助推動作來登錄用戶。另外,我還有另一個功能,可以在15分鐘後通過清除sessionStorage而無需記錄用戶。保持用戶登錄,在反應通量應用程序?

它正常工作,直到我刷新頁面。此時,15分鐘後將用戶註銷的setInterval函數將自行重置。

下面的代碼,使我所提到的意義:

在我父組件,我有以下的功能,我componentDidMount函數中調用。

checkSession: function() { 
    if (!_.isNull(window.localStorage)) { 
     var currentTimeStamp = Date.parse(new Date()); 
     var logInStamp = window.sessionStorage.time; 
     var difference = currentTimeStamp - logInStamp; 

     if (Math.floor((difference/1000)/60) < 15) { 
     var data = { 
      email: window.sessionStorage.email, 
      scheduler_slug: window.sessionStorage.slug 
     }; 
     ActionCreator.loginUser(data); 
     } 
    } 
    }, 

    logOut: function() { 
    if (this.state.isLoggedIn === true) { 
     window.sessionStorage.clear(); 
     ActionCreator.logOutUser(); 
    } 
    }, 

    componentDidMount: function() { 
    Store.addChangeListener(this._onChange); 
    this.checkSession(); 
    setInterval(this.logOut, 900000); 
    } 

我在創建會話的ajax調用成功時設置了sessionStorage的關鍵值。在隨後的api調用中,我將響應中第一次調用收到的令牌發送回我的響應頭中進行認證。

我的問題是2倍:

1)是我目前的做法足以維護用戶會話?會使用Cookie更好嗎?

2)如果我目前的做法是好的,那麼我需要找出一種辦法,以防止定時器從復位上,我認爲將是一個簡單的辦法,但一切我看到涉及使用cookie刷新頁面。有另一種方法嗎?

回答

0
  1. 這是很主觀的。如果這種方法適用於你,那沒關係。餅乾也是一個很好的選擇,這取決於。你提到你使用你目前的方法有一些麻煩(主要是刷新頁面)。餅乾可以幫助,但也不是一些銀彈。明智的選擇是什麼適合你的應用程序的最佳(想想如果你希望你的服務器調用從圖書館等調用,使用cookie時可能會引入更多的煩惱。
  2. 既然你已經存儲在sessionStorage東西,你也可以選擇存儲只需在localStorage的數據。這將確保它保持不變,而且由於節省時間,以及你基本上是提供自己的會話存儲,是存續的刷新。

一個側面說明,sessionStorage所以如果你打開一個新的選項卡,你會得到一個新的會話,如果你刷新你應該有相同的存儲。根據你的應用程序,你可能想要看看你有些什麼或者刷新發生在不同的選項卡中。

相關問題