2013-01-09 3 views
6

Ich entwickle Java Servlets. Zum Zeitpunkt der Überprüfung, ob ein Benutzer angemeldet ist, möchte ich prüfen, ob die HTTP-Anfrage eine gültige Sitzung hat. Für das Prüfen, ich habe 2 Möglichkeiten:Auf gültige Sitzung prüfen: isRequestedSessionIdValid() vs getSession (false)

(1)

protected void processRequest(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException { 

    HttpSession session = request.getSession(false); 
    if (session != null) { 
     // user is logged in 
     ... 
    } 
} 

Da ich als Argument falsch passieren, gibt es keine neue Sitzung erstellt, wenn es keine gültige Sitzung ist bereits vorhanden, und die Funktion zurück null, für was ich überprüfen kann.

Oder ich tun:

(2)

if (request.isRequestedSessionIdValid()) { 
     // user is logged in 
     ... 
    } 

Gibt es einen Unterschied, ein Vorteil/Nachteil? Oder funktionieren beide Funktionen mehr oder weniger gleich?

Antwort

10

Formular Javadoc

isRequestedSessionIdValid boolean isRequestedSessionIdValid() überprüft, ob der angeforderte Sitzungs-ID noch gültig ist. Wenn der Client keine Sitzungs-ID angegeben hat, gibt diese Methode false zurück.

Rückgabe: true, wenn diese Anfrage eine ID für eine gültige Sitzung im aktuellen Sitzungskontext hat; falsch sonst

Also im Sinne sind beide gleich. Was Sie jedoch beachten müssen, ist request.getSession (false) wird nur im Falle einer ersten Anfrage an den Container null sein. Nachdem der erste Anforderungscontainer eine Sitzung erstellt und Jsessionid-Cookie zusammen mit der Antwort gesendet hat, kann er nachfolgende Anforderungen vom selben Browser verfolgen. Wenn Sie in Ihrem Fall nicht überprüfen möchten, ob die Sitzung null ist oder nicht, sollten Sie das Sitzungsattribut "is_logged_in" = true speichern und nach diesem Attribut suchen, wenn die Sitzung nicht null ist.

+3

+1 für "Nach dem ersten Anfrage-Container erstellt eine Sitzung und sendet Jsessionid-Cookie mit Antwort" – informatik01

1

Basierend auf dem Wortlaut des JavaDoc scheint es eine Unterscheidung zu geben: Wenn eine gültige Sitzung bereits erstellt wurde (von einem früheren Anruf zu request.getSession(true)), dann ist die angeforderte Sitzungs-ID nicht gültig, aber request.getSession(false) wird eine gültige (nicht null) Sitzung haben, um zurückzukehren. Ich habe diese Theorie nicht getestet.

Verwandte Themen