2013-01-21 16 views
11

ho aperto la seduta nel mio servlet quando l'utente esegue un login riuscito:Come convalidare/invalidare le sessioni jsp/servlet?

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

Poi ho scritto nel logout.jsp per terminare la sessione:

<%session.invalidate();%> 

Per controllare se una sessione è valida sto facendo questo:

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

Ma non funziona, io sono sempre la sessione valida anche dopo la session.invalidate. Qualcuno capisce dove sto sbagliando?

+0

Sembra già risposto: http://stackoverflow.com/questions/4899500/jsf-logout-using-session-invalidate-does-not-clear-the-current-username –

+0

no non lo fa rispondi al mio problema, sto parlando di jsp/servlet e non di tag jsf. d'altra parte voglio sapere che problema ho nel mio codice –

+0

L'idea è la stessa, dovresti reindirizzare la richiesta a una nuova pagina, che il contenitore invalida definitivamente la tua vecchia sessione. –

risposta

22

si dovrebbe chiamare session.getSession (false) - che restituisce null se non esiste una sessione corrente.

in base alle docs

HttpSession#getSession(boolean create) - creare - vero per creare una nuova sessione per questa richiesta, se necessario; false per restituire null se non c'è una sessione corrente.

Quindi il modo corretto di controllo valore di sessione sarebbe -

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

e una volta che invalidare la sessione -

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

grazie, quindi request.getSession (false) se la sessione è attiva, cosa restituirà? Scusami ma voglio davvero capirlo. –

+0

restituirà la sessione corrente. –

+2

Questa è la risposta giusta. Solo per aggiungere @AlbanoVito potresti essere interessato a [cancellare la cache del browser] (http://stackoverflow.com/a/3902700/1317692). – Fallup

-1

per convalidare la sessione

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

Per invalidare devi farlo

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

ma è necessario mantenere una cosa in mente che l'oggetto possa diventare non valida ma questo doesnot significa che sarà ripulito immediatamente, anche dopo invalidare dopo tutti i suoi attributi andati è possibile che oggetto sesssion otterrà riutilizzato , Ho avuto lo stesso ID utente e il tempo di creazione.