Как сообщить пользователю, что срок его сеанса истек?

StackOverflow https://stackoverflow.com/questions/2002303

  •  18-09-2019
  •  | 
  •  

Вопрос

Я настроил Tomcat на удаление сеансов после 15 минут бездействия.Что-то вроде этого

<session-config>
    <session-timeout>15</session-timeout>
</session-config>

Всякий раз, когда пользователь обращается к странице с ограниченным доступом (требующей входа пользователя в систему), я проверяю сеанс, чтобы убедиться, что процесс входа в систему завершен.Если да, то доступ предоставляется, если нет, то пользователь перенаправляется на страницу входа, где ему/ей предлагается ввести действительный идентификатор и пароль.Если время сеанса истекло, пользователю необходимо снова войти в систему.И это нормально, но я хотел бы сообщить пользователю, что ему/ей необходимо снова войти в систему, поскольку время сеанса истекло.

Как мне это сделать?Я нашел интерфейс HttpSessionListener и подумал, что это может помочь, но метод sessionDestroyed вызывается прямо перед тем, как сеанс становится недействительным, поэтому установка параметра там бесполезна, как и ожидалось.

Это было полезно?

Решение

При входе в систему установите долгоживущий файл cookie (1 день?), который вы удалите (установите возраст равным 0) при обычном выходе из системы.Если вы снова попадете на страницу входа в систему, когда пользователь не вошел в систему и файл cookie все еще присутствует, это означает, что срок действия сеанса истек.

<c:if test="${empty user && not empty cookie.user}">
    You were logged out because the session was expired.
</c:if>

Другие советы

Когда вы перенаправляете пользователя на форму входа в систему, установите параметр запроса, параметр URL-адреса или файл cookie, который указывает, что срок действия сеанса истек (удалите файл cookie после отображения формы входа, если вы используете файл cookie).Затем при отображении формы проверьте индикатор окончания сеанса и отобразите соответствующее сообщение.

Вы можете проверить, истек ли сеанс и/или истекло ли время ожидания, с помощью:

if (request.getRequestedSessionId() != null
        && !request.isRequestedSessionIdValid()) {
    // Session is expired
}

Использовать getRequestedSessionId различать новые и существующие (действительные/истекшие) сеансы и использовать isRequestedSessionIdValid чтобы различать действительные и новые/истекшие сеансы.

Вы можете поместить этот код в Фильтр.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top