Javascript 在react flux应用程序中保持用户登录?

Javascript 在react flux应用程序中保持用户登录?,javascript,authentication,reactjs,flux,session-storage,Javascript,Authentication,Reactjs,Flux,Session Storage,我正在开发一个react-flux应用程序,其中我使用sessionStorage通过检查sessionStorage中是否有电子邮件和身份验证令牌来保持用户登录。如果它们可用,并且自登录以来的时间少于15分钟,我将触发flux操作以让用户登录。我还有另一个功能,可以在15分钟后通过清除会话存储来注销用户 它工作正常,直到我刷新页面。此时,用户在15分钟后注销的setInterval函数会自行重置 下面是我所指的代码: 在父组件中,我在componentDidMount函数中调用了以下函数 ch

我正在开发一个react-flux应用程序,其中我使用sessionStorage通过检查sessionStorage中是否有电子邮件和身份验证令牌来保持用户登录。如果它们可用,并且自登录以来的时间少于15分钟,我将触发flux操作以让用户登录。我还有另一个功能,可以在15分钟后通过清除会话存储来注销用户

它工作正常,直到我刷新页面。此时,用户在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);
  }
检查会话:函数(){ 如果(!.isNull(window.localStorage)){ var currentTimeStamp=Date.parse(new Date()); var logInStamp=window.sessionStorage.time; var差异=当前时间戳-logInStamp; 如果(数学下限((差/1000)/60)<15){ 风险值数据={ 电子邮件:window.sessionStorage.email, 调度程序\u slug:window.sessionStorage.slug }; ActionCreator.loginUser(数据); } } }, 注销:函数(){ if(this.state.isLoggedIn==true){ window.sessionStorage.clear(); ActionCreator.logOutUser(); } }, componentDidMount:function(){ Store.addChangeListener(this.\u onChange); 这个.checkSession(); setInterval(this.logOut,900000); } 我正在为sessionStorage设置关键值,前提是创建会话的ajax调用成功。在随后的api调用中,我将从响应头中的第一个调用中收到的令牌发送回以进行身份验证

我的问题有两个:

1) 我目前的方法是否足以维持用户会话?使用饼干会更好吗

2) 如果我目前的方法是好的,那么我需要找出一种方法来防止计时器在页面刷新时重置,我认为这是一个简单的修复方法,但我看到的一切都涉及到使用cookies。还有别的办法吗

  • 这是非常主观的。如果这种方法对你有效,那也没关系。Cookies也是一个很好的选择,这要看情况而定。您提到您在使用当前方法时遇到了一些问题(主要是页面刷新)。一块饼干可能会有帮助,但也不是什么灵丹妙药。明智地选择最适合您的应用程序的应用程序(想想您是否希望从库等调用服务器调用,这可能会在使用cookie时带来更多麻烦)
  • 由于您已经在
    会话存储
    中存储了一些内容,您也可以选择将数据简单地存储在localStorage中。这将确保数据保持不变,并且由于节省了时间,您基本上提供了自己的会话存储,在刷新后仍然有效
  • 附带说明,
    sessionStorage
    不应在刷新时重置自身,它存在于选项卡上下文中。因此,如果打开一个新选项卡,您确实会获得一个新会话,如果刷新,您应该具有相同的存储空间。根据您的应用程序,如果您在某处替换数据,或者刷新发生在不同的选项卡中,您可能需要查看一番。