Наши журналы приложения прочь после 30 минут и перенаправляются к странице входа в систему, я указываю тайм-аут сессии в web.xml и использую requestProcessor для перенаправления. Я хочу показать пользователю сообщение, говоря, что Ваша сессия истекла, после того как сессия истекает, как я могу сделать это. Автоматический выход? Я хотел бы запросить сообщение об ошибке на странице "The session is timeout, please login again". Затем то, как я мог обнаружить сессию, является тайм-аутом? какие-либо методы инициируют автоматически?
Создайте средство проверки активности, которое каждую минуту проверяет, имели ли место какие-либо действия пользователя (щелчок мышью, нажатие клавиш), и выполняет контрольный сигнал на стороне сервера, чтобы поддерживать сеанс в рабочем состоянии, когда пользователь находится в активен и ничего не делает, когда пользователь не активен. Если в течение 30 минут нет активности (или любой другой тайм-аут сеанса по умолчанию, установленный на стороне сервера), выполните перенаправление.
Вот начальный пример с небольшой помощью jQuery для привязки событий щелчка и нажатия клавиш и запуска запроса ajax.
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(document).ready(function() {
$.active = false;
$('body').bind('click keypress', function() { $.active = true; });
checkActivity(1800000, 60000, 0); // timeout = 30 minutes, interval = 1 minute.
});
function checkActivity(timeout, interval, elapsed) {
if ($.active) {
elapsed = 0;
$.active = false;
$.get('heartbeat');
}
if (elapsed < timeout) {
elapsed += interval;
setTimeout(function() {
checkActivity(timeout, interval, elapsed);
}, interval);
} else {
window.location = 'http://example.com/expired'; // Redirect to "session expired" page.
}
}
</script>
Создайте сервлет
, который прослушивает / heartbeat
и в основном выполняет следующие действия:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
request.getSession();
}
для поддержания активности сеанса.
Когда вы сохраняете вошедшего в систему пользователя в сеансе, он будет «автоматически» выходить из системы по истечении срока сеанса. Таким образом, вам не нужно вручную выходить из системы.
Включите служебную функцию javascript в свой JSP и проверяйте связь с сервером каждые 31 минуту. Вышеупомянутая служебная функция должна использовать внутреннюю функцию JS setTimeout ().
setTimeout ( "checkServerSession()", /* intervalInMilliSeconds */ 31000);
Обратите внимание, что
checkServerSession ()
- это обычная функция JS, которая может запускать HTTP-запросы. Если запрос является успешным, сеанс существует, в противном случае покажите подсказку пользователю.
Если вы используете сессии сервлетов, вы можете проверить, является ли сессия, которую возвращает jsp / сервлет, новой, используя метод isNew(). Если да, то сессия пользователя истекла, и вы можете вывести соответствующие сообщения.
Создайте класс Listener, реализующий HttpSessionListener
, и определите его в web.xml
. Это будет уведомлять вас, когда любой сеанс будет разрушен. Используйте метод sessionDestroyed ()
.
См. Полный пример здесь:
http://www.mkyong.com/servlet/a-simple-httpsessionlistener-example-active-sessions-counter/