2010-07-08 6 views
5

Наше приложение выходит из системы через 30 минут и перенаправляется на страницу входа в систему, я задаю время ожидания сеанса в web.xml и используя requestProcessor для перенаправления. Я хочу показать пользователю сообщение с сообщением ваш сеанс истек, как только сессия закончится, как я могу это сделать. Я хотел бы высветить сообщение об ошибке на странице «Сессия - время ожидания, пожалуйста, войдите снова». Тогда как я могу определить, что сеанс - это тайм-аут? будут ли какие-либо методы запускаться автоматически?Автоотключение после окончания сеанса

ответ

9

Создайте проверку активности, которая проверяет каждую минуту, если какая-либо деятельность пользователя произошла (mouseclick, keypress) и выполняет биение на стороне сервера, чтобы сохранить сеанс в активном состоянии, когда пользователь активен, и ничего не делает, когда пользователь не выполняет активный. Если в течение 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> 

Servlet Создать который прослушивает /heartbeat и делает в основном только следующее:

@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) { 
    request.getSession(); 
} 

продержать сессию живой.

Когда вы храните зарегистрированного пользователя в сеансе, он будет «автоматически» выходить из системы всякий раз, когда истекает срок действия сеанса. Поэтому вам не нужно вручную выходить из системы пользователем.

+0

. Я хочу, чтобы отображалось предупреждающее сообщение. после 30 минут, как я могу изменить вышеупомянутый скрипт, я определил время сеанса в web.xml – sarah

+0

Этот скрипт показывает всплывающее окно, даже если приложение используется. – sarah

+0

Это может произойти, если в одном сеансе открыто несколько окон. Это был основной пример запуска. Вам нужно будет сделать еще несколько шагов. Прогоните ajaxical опросы на стороне сервера, чтобы поддерживать сеанс до тех пор, пока пользователь активен. Вы можете найти пример в [этом другом ответе меня] (http://stackoverflow.com/questions/2319020/mvc-with-jquery-handling-session-expire/2319211#2319211). – BalusC

0

Если вы используете сеансы сервлетов, вы можете проверить, является ли сеанс, возвращаемый jsp/servlet, новым, используя метод isNew(). Если да, то срок действия пользователя истек, и вы можете отобразить соответствующие сообщения.

+0

сообщение об окончании сеанса пользователя должно отображаться только после истечения тайм-аута, в вашем случае оно будет отображаться даже после выхода из системы, которое мне не нужно – sarah

2

Создать класс прослушивателя, реализующий HttpSessionListener и определить его в web.xml

Это уведомит Вас, когда сессия будет уничтожен. Используйте метод sessionDestroyed().

Смотрите полный пример здесь:

http://www.mkyong.com/servlet/a-simple-httpsessionlistener-example-active-sessions-counter/

+1

Вышеупомянутое решение не заставит браузер отображать диалоговое окно. –

+0

Вышеупомянутое решение заставит приложение запрашивать сообщение даже после выхода из системы, оно не проверяет время истечения срока действия, скажем, 30 минут и покажет сообщение – sarah

0

включать в яваскрипте функцию полезности внутри вашей JSP и пинг сервера каждые 31 минут. Вышеупомянутая функция утилиты должна использовать внутреннюю функцию setTimeout() JS.

setTimeout ("checkServerSession()", /* intervalInMilliSeconds */ 31000); 

Обратите внимание, что

checkServerSession()

регулярная функция JS, которая может срабатывать HTTP-запросов. Если запрос является успешным сеансом, в противном случае отображается запрос пользователю.

+0

. Дайте мне знать пример, как это может быть функционировать. – sarah

Смежные вопросы