Я установил gem 'auto-session-timeout'
, чтобы автоматически отключать пользователей от неактивных сеансов. Я хочу, чтобы дать пользователю 2 минутное предупреждение перед временем сессии изПроблема кэширования Javascript с рельсами
Я добавил следующее к моему application.html.erb
<%= javascript_tag do %>
var d = new Date('<%= session[:auto_session_expires_at] %>');
setInterval(function(){
var d = new Date('<%= session[:auto_session_expires_at] %>');
var e = new Date();
var f = e.getTime();
var diff = d - f ;
alert(d + " | " + diff);
if (diff < 120000) {
// alert("Your session is about to timeout in less than 2 minutes " + diff);
}
}, 10000);
<% end %>
Моя цель состоит в том, чтобы использовать if (diff < 120000)
заявление, чтобы показать предупреждение 2 минут от выхода из системы.
Приведенный выше код получает переменную сеанса, заданную с помощью автоматического сеанса, и затем вычитает ее с текущей даты (из getTime() js и создает diff.
Это ПОЛНОСТЬЮ работает нормально. При взаимодействии с приложением счетчик сбрасывается. Однако похоже, что старый счетчик продолжает работать.
Другими словами, если я посмотрю на результаты оператора предупреждения, которые не были отмечены, я могу увидеть время, которое находится в переменной сеанса и рассчитанном diff. Ниже я показываю только минуты и сеансы, которые показаны для простоты.
25:22 168134 - первое окно предупреждения - показывает содержимое сеанса var, а также показывает вычисленные интервалы разности или миллисекунды.
25:22 143249 - второе поле оповещения - все как ожидается.
25:22 120816 - Значит, он правильно отсчитывать с правильной информацией от сессии переменной
Теперь, если я взаимодействовать с приложением, тайм-аут автоматического сеанса сбрасывает переменную auto_session_expires_at сеанса.
26:13 158345 - ОК - именно то, чего я ожидал бы. Javascript подбирает новую переменную сеанса и пересказывает diff.
25:22 86327 - Но теперь я вижу предыдущий переменный сеанс и дифф калькулятор все еще работают
Цикл выше будет повторять между «хорошим» и «старой» переменным сеансом и разн. Я думаю, что происходит какое-то кеширование, но я не могу его точно определить.
это поведение повторяемые для меня
==================================== =================== HTML с момента, когда я первый открыть приложение
/<![CDATA[
var d = new Date('2016-05-06 15:58:19 -0400');
setInterval(function(){
var d = new Date('2016-05-06 15:58:19 -0400');
var e = new Date();
var f = e.getTime();
var diff = d - f ;
alert(d + " | " + diff);
if (diff < 120000) {
// alert("Your session is about to timeout in less than 2 minutes " + diff);
}
}, 10000);
//]]>
HTML с после того, как я нажимаю на пункт нав. Вы можете видеть, что дата, снятая с изменения переменной сеанса, изменяется
/<![CDATA[
var d = new Date('2016-05-06 15:58:48 -0400');
setInterval(function(){
var d = new Date('2016-05-06 15:58:48 -0400');
var e = new Date();
var f = e.getTime();
var diff = d - f ;
alert(d + " | " + diff);
if (diff < 120000) {
// alert("Your session is about to timeout in less than 2 minutes " + diff);
}
}, 10000);
//]]>
</script>
Когда вы говорите, что сеанс сбрасывается после взаимодействия с сайтом, вы перенаправляетесь? Я спрашиваю об этом, потому что было бы полезно увидеть сгенерированный HTML-код. – SanF
Извините, я, возможно, был немного нечетким. То, что я делал, это выбрать что-то из навигационного меню, так как это загружает новую страницу. –
Хорошо, можете ли вы опубликовать сгенерированный HTML-код для проверки функции javascript? – SanF