2013-01-09 10 views
6

Zajmuję się programowaniem Java Servlet. W momencie sprawdzania, czy użytkownik jest zalogowany, chcę sprawdzić, czy żądanie HTTP ma prawidłową sesję. W celu sprawdzenia, że ​​mam 2 możliwości:Sprawdź poprawność sesji: isRequestedSessionIdValid() vs getSession (fałsz)

(1)

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

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

Od mijam false jako argument, nie ma nowej sesji tworzony jeśli nie istnieje ważna sesja już istniejących, a funkcja zwraca null, za co mogę sprawdzić.

Albo zrobić:

(2)

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

Czy jest jakaś różnica, każdy zaleta/wada? Czy też obie funkcje działają mniej więcej tak samo?

Odpowiedz

10

Forma JavaDoc

isRequestedSessionIdValid logiczna isRequestedSessionIdValid (kontrole) czy żądana identyfikator sesji jest nadal ważny. Jeśli klient nie określił żadnego identyfikatora sesji, ta metoda zwraca wartość false.

Zwroty: prawda, jeśli to żądanie ma identyfikator dla ważnej sesji w bieżącym kontekście sesji; false inaczej

Więc w sensie oba są takie same. Ale musisz wiedzieć, że request.getSession (false) będzie wartością null tylko w przypadku pierwszego żądania do kontenera. Po utworzeniu pierwszego żądania kontener tworzy sesję i wysyła plik cookie Jsessionid wraz z odpowiedzią, dzięki czemu może śledzić kolejne żądania z tej samej przeglądarki. Tak więc w twoim przypadku zamiast sprawdzania, czy sesja ma wartość zerową czy nie, powinieneś zapisać atrybut sesji "is_logged_in" = true i sprawdzić dla tego atrybutu, czy sesja nie jest pusta.

+3

+1 dla "Po utworzeniu pierwszego żądania kontener tworzy sesję i wysyła plik cookie Jsessionid wraz z odpowiedzią" – informatik01

1

Na podstawie sformułowania JavaDoc wygląda na to, że będzie istniało rozróżnienie: jeśli została już utworzona ważna sesja (z wcześniejszego połączenia z request.getSession(true)), żądany identyfikator sesji nie będzie ważny, ale request.getSession(false) będzie mieć prawidłową (nie zerową) sesję do zwrócenia. Nie testowałem tej teorii.

Powiązane problemy