Время ожидания сеанса - результаты в минутах

var IDLE_TIMEOUT = 2700; //seconds 45min

var _idleSecondsCounter = 0;
document.onclick = function() {
  _idleSecondsCounter = 0;
};
document.onmousemove = function() {
  _idleSecondsCounter = 0;
};

document.onkeypress = function() {
  _idleSecondsCounter = 0;
};
window.setInterval(CheckIdleTime, 1000);

function CheckIdleTime() {
  _idleSecondsCounter++;
  var oPanel = document.getElementById("SecondsUntilExpire");
  if (oPanel)
    oPanel.innerHTML = (IDLE_TIMEOUT - _idleSecondsCounter) + "";
  if (_idleSecondsCounter >= IDLE_TIMEOUT) {
    //alert("Your Session Time expired. Please Login.");
    document.location.href = "logoff.php";
  }
}
<div id='SecondsUntilExpire'></div>

Итак, сверху я получаю вывод как 2699 (это в секундах = 45 минут), и если не происходит никаких событий, его уменьшение (2698..2697..и т. д.) и если какое-либо событие (мышь вверх.. и т. д.) происходит, возвращается к 2699

Но мне нужны минуты: 44:59, 44:58 ..и так далее


person user3209031    schedule 21.08.2017    source источник
comment
Ознакомьтесь с этим случаем, если вам нужно форматирование stackoverflow. ком/вопросы/3733227/   -  person Scuzzy    schedule 21.08.2017
comment
Какой браузер вы используете?   -  person Jaromanda X    schedule 21.08.2017
comment
я использую фаерфокс   -  person user3209031    schedule 21.08.2017
comment
@Scuzzy, спасибо ... я пробовал, и сработало хорошо ... спасибо   -  person user3209031    schedule 21.08.2017


Ответы (3)


Вот как я бы закодировал его, чтобы он был читабельным

function CheckIdleTime() {
    _idleSecondsCounter++;
    var oPanel = document.getElementById("SecondsUntilExpire");
    var remain = IDLE_TIMEOUT - _idleSecondsCounter;
    var remainMinutes = Math.floor(remain / 60);
    var remainSeconds = ('0' + (remain % 60)).substr(-2);
    if (oPanel)
        oPanel.innerHTML = remainMinutes + ':' + remainSeconds; 
    if (_idleSecondsCounter >= IDLE_TIMEOUT) {
        //alert("Your Session Time expired. Please Login.");
        document.location.href = "logoff.php";
    }
}

использует

var remainSeconds = ('0' + (remain % 60)).substr(-2);

так что секунды всегда две цифры

person Jaromanda X    schedule 21.08.2017
comment
Привет, Яроманда, спасибо, все работает... еще один вопрос, событие тайм-аута сеанса не работает на всех вкладках одинаково... я имею в виду... если у меня открыты 2 вкладки в одном браузере, то есть на одной вкладке это 44:06 и дальше вторая вкладка ее 44:58 ... если я обновлю свою первую вкладку ... затем она вернется к 44:59, но если я увижу свою вторую вкладку, она показывает 43:34 .... поэтому мой вопрос: могу ли я сделать всплывающее окно, если тайм-аут меньше 1 минуты .. говорит, что вы выйдете из системы через 1 минуту, и если пользователь нажмет «ОК», он / она выйдет из системы, а если он «Нет», то его автоматический сброс - person user3209031; 21.08.2017
comment
понятия не имею, о чем вы здесь спрашиваете ... вы пытаетесь синхронизировать время ожидания в нескольких вкладках браузера? возможно, используйте localStorage или BroadcastChannel в firefox/chrome - person Jaromanda X; 21.08.2017
comment
да, синхронизируйте одинаковый тайм-аут на всех вкладках .. если я обновлю одну вкладку ... автоматически сбросить все остальные вкладки - person user3209031; 21.08.2017
comment
см. этот вопрос SO для ответа на этот - person Jaromanda X; 21.08.2017
comment
да, я погуглил и нашел локальное хранилище.. но мне нужно время, чтобы построить эту логику. сеанс будет тайм-аут ... следовательно, всплывающее окно остановит их - person user3209031; 21.08.2017
comment
о, отлично будет смотреться в этом .... спасибо - person user3209031; 21.08.2017
comment
я пробовал: если (oPanel) oPanel.innerHTML = оставшиеся минуты + ':' + оставшиеся секунды; var toald = oPanel.innerHTML; localStorage.setItem (автообновление, toald); document.getElementById(SecondsUntilExpire).innerHTML = localStorage.getItem(autoupdate); if (_idleSecondsCounter ›= IDLE_TIMEOUT) { //alert(Время вашего сеанса истекло. Пожалуйста, войдите в систему.); document.location.href = logoff.php; } .....но это не работает - person user3209031; 21.08.2017
comment
ну, я боюсь, вам понадобится больше логики, чем просто чтение и запись localStorage - person Jaromanda X; 21.08.2017
comment
ок... все равно спасибо - person user3209031; 21.08.2017

Используйте parseInt((IDLE_TIMEOUT - _idleSecondsCounter)/60) + ":" + (IDLE_TIMEOUT - _idleSecondsCounter)%60; для достижения эффекта чч:мм

var IDLE_TIMEOUT = 2700; //seconds 45min

var _idleSecondsCounter = 0;
document.onclick = function() {
    _idleSecondsCounter = 0;
};
document.onmousemove = function() {
    _idleSecondsCounter = 0;
};

document.onkeypress = function() {
    _idleSecondsCounter = 0;
};
window.setInterval(CheckIdleTime, 1000);

function CheckIdleTime() {
    _idleSecondsCounter++;
    var oPanel = document.getElementById("SecondsUntilExpire");
    if (oPanel)
        oPanel.innerHTML = parseInt((IDLE_TIMEOUT - _idleSecondsCounter)/60) + ":";
        oPanel.innerHTML += (IDLE_TIMEOUT - _idleSecondsCounter)%60<10?"0"+(IDLE_TIMEOUT - _idleSecondsCounter)%60:(IDLE_TIMEOUT - _idleSecondsCounter)%60; 
    if (_idleSecondsCounter >= IDLE_TIMEOUT) {
        alert("Your Session Time expired. Please Login.");
        //document.location.href = "logoff.php";
    }
}
<div id='SecondsUntilExpire'></div>

person Sagar V    schedule 21.08.2017
comment
@JaromandaX спасибо, код обновлен. теперь он покажет 1:01 - person Sagar V; 21.08.2017

Вам нужна эта функция

  var IDLE_TIMEOUT = 2700;
  alert(getMinutes(IDLE_TIMEOUT));
  function getMinutes(time){
       minutes = time/60;
       seconds = time%60;
       return ("00" + minutes).substr(-2)+":"+("00" + seconds).substr(-2);
 }

Демонстрация: https://jsfiddle.net/ttqtfwp5/1/

person Niklesh Raut    schedule 21.08.2017