Мое требование состоит в том, чтобы уведомить пользователя со всплывающим окном, говоря, что сеанс пользователя собирается испытать таймаут в x секунды в случае, если пользователь не выполняет действия по веб-странице.
Дополнение к этому требованию должно постепенно уменьшить значение x секунды динамично во всплывающем окне.
Среда, которую я использую, является Java EE.
Используйте HttpSession#getMaxInactiveInterval()
и setTimeout()
. В этой конкретной цели Ajax не нужен, если только вы не хотите отложить тайм-аут на каждую клиентскую активность (опрос).
Основной пример:
<script>
var secondsBeforeExpire = ${pageContext.session.maxInactiveInterval};
var timeToDecide = 15; // Give client 15 seconds to choose.
setTimeout(function() {
alert('Your session is about to timeout in ' + timeToDecide + ' seconds!')
}, (secondsBeforeExpire - timeToDecide) * 1000);
</script>
Чтобы волшебным образом декрементировать время внутри сообщения, то вместо основного alert()
вам понадобится оверлей с div, в котором вы можете контролировать содержимое через дерево HTML DOM и использовать другой setTimeout()
на 1 секунду для динамического изменения текста.
Обратите внимание, что этот скрипт должен обслуживаться JspServlet
для того, чтобы EL заработал. Таким образом, вы должны поставить скрипт в HTML
страницы JSP, или если вы действительно хотите, чтобы все JS в отдельном файле *.js
, то вы должны позволить JspServlet
обрабатывать любые *.js
запросов, а также.
Я не думаю, что Java/Java EE будет действительно полезна здесь, так как это должно быть обработано на стороне клиента (т.е. с помощью JavaScript). Одним из решений, которое я могу придумать, будет установка своего рода таймера, который будет уведомлять пользователя за несколько минут до таймаута сервера.
Во время прогулки по этому поводу я нашел запись блога Эрика Паскарелло Update User's Session with AJAX (и перезагруженную версию Updating User Session with Ajax - Round 2), которая точно описывает такое решение (и использует XMLHttpRequest
для обновления сеанса). Его сценарий управления сеансом Ajax доступен здесь .