Как реализовать напоминание об истечении сеанса с помощью JavaScript? - PullRequest
1 голос
/ 08 января 2012

Я действительно хочу, чтобы мой пользователь поддержал сеанс незадолго до его истечения.

Вчера я задал вопрос " Как я могу проверить, является ли сеанс мертвым, а затем запроситьalert?"и кто-то ответил с помощью решения AJAX / JSON, которое каждые 30 секунд звонило на страницу ASP.Это не сработало, поскольку обращения к серверу поддерживали сессию в активном состоянии, поэтому она никогда не выходила из системы.

Я продолжал читать и натолкнулся на аналогичный вопрос [SO], где кто-то предложил использовать обратный отсчет JSэто побудило пользователя возобновить сеанс за 5 минут до истечения срока его действия.

Это то, что я сделал до сих пор, но:

  1. Функция startMainTimer делаетПохоже, я не получаю время, потому что я не получил предупреждение, когда таймер должен был срабатывать.
  2. Функция $('body').mousedown() не работает должным образом.Это работает, но если пользователь щелкает ссылку, функция mousedown работает, но не переходит по ссылке после запуска функции.

Вот код:

<script>
$(document).ready(function() {
    $.ajax({ // get session expiration value e.g. 60
    type : 'GET',
    url : '../getSessionValue.asp',
    dataType : 'text',
    success : function(data) {
        if (data != '') {
            var newSessionValue = data - 5
            startMainTimer(newSessionValue * 60000); // deduct 5 minutes, convert to mSeconds & call startNewTimer()
        }
    }
    });

    $('body').mousedown( function() { // if user clicks anywhere on page call ajaxRenewSession() function
        ajaxRenewSession();
    });

    $('#userButtonRenewSession').click( function() { // if user clicks continue browsing button
        ajaxRenewSession();
    });
});

function startMainTimer(newSessionValue,restart) {
    if (restart == 'yes') {
        clearInterval(interval);
    }
    var counter = 0;
    var interval = setInterval(function() {
        counter++;
        if (counter == newSessionValue) {
            alert("Your session is about to expire!");
            clearInterval(interval);
        }
    }, 1000);
}

function ajaxRenewSession() { // AJAX the server to renew session, get session timeout value and then reset JS timer
    $.ajax({
    type : 'GET',
    url : '../renewSession.asp',
    dataType : 'text',
    success : function(data) {
        if (data != '') {
                var newSessionValue = data - 5
                startMainTimer(newSessionValue * 60000, 'yes');
        }
    }
    });
}
</script>

МожетКто-нибудь помочь мне исправить эти проблемы?

1 Ответ

1 голос
/ 08 января 2012

Кажется, что работает с mouseup, я проверил это на stackoverflow.com.Однако в некоторых случаях он может не работать, например, если пользователь нажимает на ссылку, перетаскивает ее, а затем отбрасывает.В этом случае событие не было сгенерировано для меня.

Еще одна вещь: вам придется очистить основной таймер в начале startMainTimer, потому что в противном случае, каждый раз, когда пользователь нажимает где-то, запускается дополнительный таймер..

А вы знаете, что последний вызов startMainTimer пропускает параметр?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...