Как я могу сообщить пользователю, что его / ее сеанс истек? - PullRequest
2 голосов
/ 05 января 2010

Я настроил Tomcat на удаление сеансов после 15 минут бездействия. Как то так

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

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

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

Ответы [ 3 ]

2 голосов
/ 05 января 2010

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

<c:if test="${empty user && not empty cookie.user}">
    You were logged out because the session was expired.
</c:if>
2 голосов
/ 29 июня 2010

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

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

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

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

2 голосов
/ 05 января 2010

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

...