2010-11-16 2 views
0

У меня есть сервлет LogMeOut.java, где я пишу следующий код:Проблема с request.getSession

HttpSession session = request.getSession(false); 
if (session != null){ 
    //statements to delete my cookies // 
    session.invalidate(); 
} 

Моя проблема в том, когда я звоню LogMeOut впервые от JSP, это дает запросить объект без сеанса. Так что мой session.invalidate не работает. Но если я вернусь к своему jsp, а затем вызову тот же LogMeOut, на этот раз объект запроса содержит правильный сеанс, и он работает. Любая идея почему? Или где я должен начать искать?

ответ

3

Если вы позвоните по номеру getSession(false) по запросу без существующего сеанса, он вернет null. Это expected, documented behaviour.

Если вы вызываете getSession(true) или просто getSession(), тогда сеанс будет создан, если он не существует.

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

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

+0

Да, но я хочу аннулировать сеанс в первый раз, когда я вызываю сервлет, но это, похоже, не происходит. Это происходит только во второй раз, когда я вызываю свой сервлет. Как убедиться, что я получаю правильный запрос с не-нулевым сеансом при первом вызове? – rishi

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