2013-01-21 12 views
11

Otworzyłem sesję w moim apletu, gdy użytkownik wykonał udane logowanie:Jak zweryfikować/unieważnić sesje jsp/servlets?

HttpSession session = request.getSession(true); 
session.setAttribute("name", name); 

czym napisałem w logout.jsp aby zakończyć sesję:

<%session.invalidate();%> 

aby sprawdzić, czy sesja jest Ważna robię to:

HttpSession session = request.getSession(); 
String name = (String) session.getAttribute("name"); 

Ale to nie działa, sesja jest ważna nawet po sesji.invalidate. Czy ktoś rozumie, co robię źle?

+0

Wygląda już odpowiedział: http://stackoverflow.com/questions/4899500/jsf-logout-using-session-invalidate-does-not-clear-the-current-username –

+0

nie to nie robi odpowiedź na mój problem, mówię jsp/servlets, a nie znaczniki jsf. co z drugiej strony chcę wiedzieć, jaki problem mam w moim kodu –

+0

Pomysł jest taki sam, należy skierować wniosek do nowej strony, niż pojemnik ostatecznie unieważnić swoją starą sesję. –

Odpowiedz

22

należy zadzwonić session.getSession (false) - która zwraca null, jeśli nie ma bieżącej sesji.

według docs

HttpSession#getSession(boolean create) - tworzyć - prawda, aby utworzyć nową sesję dla tego wniosku, jeżeli jest to konieczne; false, aby zwrócić wartość null, jeśli nie ma bieżącej sesji.

więc poprawny sposób sprawdzania wartości Sesja -

HttpSession session = request.getSession(false); 
if(session!=null) 
    session.setAttribute("name", name); 

i po unieważnić sesję -

HttpSession session = request.getSession(false); 
if(session!=null) 
session.invalidate(); 
+2

dziękuję, więc request.getSession (false), jeśli sesja jest aktywna, co powróci? Przepraszam, ale chcę to naprawdę zrozumieć. –

+0

spowoduje zwrócenie bieżącej sesji. –

+2

To jest właściwa odpowiedź. Aby dodać @AlbanoVito, możesz również zainteresować się [wyczyszczeniem pamięci podręcznej przeglądarki] (http://stackoverflow.com/a/3902700/1317692). – Fallup

-1

do sprawdzania poprawności sesji

HttpSession session = request.getSession(true); 
session.setAttribute("name", name); 

Aby unieważnić musisz zrobić

session.removeAttribute("name"); 
session.invalidate(); 

Ale trzeba zachować jedno na uwadze, że obiekt może stał się nieważny, ale to doesnot oznacza, że ​​będzie ona natychmiast czyszczone, nawet po unieważnieniu go po wszystkie jego atrybuty poszedł możliwe jest, że obiekt sesssion dostanie ponownie wykorzystane , Mam ten sam identyfikator użytkownika i czas utworzenia.