2016-03-11 8 views
0

Я работаю над приложением action-flux, где я использую sessionStorage, чтобы пользователь вошел в систему, проверяя, доступны ли в sessionStorage адреса электронной почты и аутентификатора. Если они доступны, и время с момента входа в систему составляет менее 15 минут, я запускаю действие потока для входа пользователя в систему. У меня также есть еще одна функция, которая независимо от времени регистрирует пользователя через 15 минут, очищая sessionStorage.Ведение пользователя, входящего в состав приложения для реагирования на поток?

Он отлично работает, пока я не обновляю страницу. На этом этапе функция setInterval, которая регистрирует пользователя через 15 минут, сбрасывается.

Вот код, чтобы понять, что я имею в виду:

В моем родительском компоненте у меня есть следующие функции, которые я называю внутри функции 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); 
    } 

Я устанавливаю значения ключа для sessionStorage для успеха моего вызова ajax для создания сеанса. В последующих вызовах api я отправляю обратно токен, полученный в ответ от первого вызова в моем заголовке ответа для аутентификации.

Мой вопрос 2 раза:

1) Является ли мой нынешний подход достаточно, чтобы поддерживать сеанс пользователя? Будет ли использование файлов cookie лучше?

2) Если мой текущий подход в порядке, то мне нужно выяснить, как предотвратить сброс таймера на обновление страницы, которое, как я думал, будет легким решением, но все, что я вижу, связано с использованием файлов cookie. Есть ли другой способ?

ответ

0
  1. Это очень субъективно. Если этот подход работает для вас, это нормально. Cookies также являются хорошим вариантом для этого, это просто зависит. Вы отмечаете, что у вас есть проблемы, связанные с вашим текущим подходом (в основном, при обновлении страницы). Печенье может помочь, но это не какая-то серебряная пуля. Правильно выбирайте, что лучше подходит вашему приложению (подумайте о том, хотите ли вы когда-либо вызывать вызовы на сервере из библиотек и т. Д., Что может вызвать больше неприятностей при использовании файлов cookie.
  2. Поскольку вы уже храните что-то в sessionStorage, вы также можете выбрать для хранения данных просто в LocalStorage. Это гарантирует, что он остается тем же, и так как экономится время, а вы в основном обеспечивая собственное хранилище сеанса, который выживает освежать.

примечание стороны, sessionStorage не должен перезагружать себя при обновлении, он живет в табу-контексте. Поэтому, если вы открываете новую вкладку, вы получаете новый сеанс, если вы обновляете, вы должны иметь одно и то же хранилище. В зависимости от вашего приложения вы можете захотеть взгляните, если вы немного вместо замены данных, или если обновление происходит на другой вкладке.