2013-12-10 3 views
1

Требование следующее: при истечении срока действия пользователя вызывается страница expired.htm, а при первом подключении к веб-сайту - login.htm.Как определить истекший сеанс против сеанса

Я попытался использовать фильтр, но он не работает, я не могу сказать, чтобы фильтровать, как понять, если это новый запрос или старый запрос истек. Это код, который я использовал:

if (session.getAttribute("userProfile") == null) { 

    logger.debug("Session: " + (session.isNew() ? "true" : "false")); 
    logger.debug(request.getSession().isNew()); 

    if (request.getRequestedSessionId() != null && !request.isRequestedSessionIdValid()) { 
     return new ModelAndView("redirect:expired.htm"); 
    } else { 
     return new ModelAndView("redirect:login.htm"); 
    } 


} 

Я пробовал различные решения, предложенные здесь на переполнение стека и общим доступом в Интернет, но ничего не работает, и каждый запрос идет к expired.htm.

+1

Я бы сказал, что если пользователь посылает неверный идентификатор сеанса можно считать, что сеанс истек, т. е. для получения идентификатора пользователь должен был либо уже посетить сайт, либо скопировать ссылку с идентификатором сеанса. – Thomas

+0

Я также проверил isNew, но это всегда верно, также когда сессия истекла (я активирую слушателя, который показывает мне, когда сессия заканчивается) –

ответ

0

Как вы получаете объект сеанса? Прежде чем делать это, используйте

if (request.getSession(false)==null) { 
    // no session present (expired or new visitor) 
    [... do something ...] 
} else { 
    // active session present 
} 
0

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

if(request.getSession(false) == null) { //Session don't exists 
... 
} 

Java объяснить:

общественного HttpSession getSession (булевы создать)

Возвращает текущую HttpSession, связанную с этим запросом, или, если нет текущей сессии и создать истинно, возвращает новую сессию.
Если create является ложным и запрос не имеет действительного HttpSession, этот метод возвращает null.
Чтобы убедиться, что сеанс должным образом поддерживается, вы должны вызвать этот метод до того, как будет выполнен ответ. Если в контейнере используются файлы cookie для сохранения целостности сеанса и предлагается создать новый сеанс при ответе, генерируется исключение IllegalStateException.
Параметры:
create - true для создания нового сеанса для этого запроса, если необходимо; ложно вернуть нулевым значение, если нет никакой текущей сессии
Возвратов:
в HttpSession, связанный с этим запросом или нулевым значением, если создать ложно и запрос не имеет действительного сеанса

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