2016-03-11 64 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所以如果你打开一个新的选项卡,你会得到一个新的会话,如果你刷新你应该有相同的存储。根据你的应用程序,你可能想要看看你有些什么或者刷新发生在不同的选项卡中。

相关问题