Как проверить сессию истек в java?
Есть ли другой способ проверить истечение сеанса, кроме этого
session.isNew()
Ответы
Ответ 1
Определите класс, скажем SessionTimeoutIndicator
, который реализует интерфейс javax.servlet.http.HttpSessionBindingListener
.
Затем создайте объект SessionTimeoutIndicator
и добавьте его в сеанс пользователя.
Когда сеанс будет удален, метод SessionTimeoutIndicator.valueUnbound()
вызывается механизмом Servlet.
Затем вы можете выполнить valueUnbound()
для выполнения требуемой операции.
Надеюсь, он очистится сейчас.
Ответ 2
Да:
-
вы можете вызвать HttpServletRequest.getSession(false)
, и вы получите null
вместо сеанса, если уже неактивен.
-
вы можете определить слушателя жизненного цикла (используя HttpSessionListener
) в web.xml
. Таким образом, вы можете получить уведомление о том, как сеанс кусает пыль.
Ответ 3
С session.isNew
вы не можете отличать истекшие сеансы от совершенно новых сеансов.
Вы можете проверить, истекло ли время ожидания и/или время ожидания:
if (request.getRequestedSessionId() != null
&& !request.isRequestedSessionIdValid()) {
// Session is expired
}
Используйте getRequestedSessionId
, чтобы различать новые и существующие (действительные/истекшие) сеансы, и используйте isRequestedSessionIdValid
для различения между действительными и новыми/истекшими сеансами.
Вы можете поместить этот код в Filter.
Ответ 4
Я пробовал это
HttpSessionListener.sessionDestroyed()
и этот
if (request.getRequestedSessionId() != null
&& !request.isRequestedSessionIdValid()) {
// Session is expired
}
оба работают, но не на 100%, вы знаете, потому что он продолжает показывать "Session expired", даже если при первом запуске приложения. Зачем?
Спасибо за помощь.