Как проверить сессию истек в 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", даже если при первом запуске приложения. Зачем? Спасибо за помощь.