Jak sprawdzić, czy istniejąca sesja jest unieważnionaalbo nie? W poniższym kodzie loginBean sprawdziłem każde logowanie, na którym użytkownik już się zalogował. Jeśli już jesteś zalogowany przez inny system, dezaktywuj tę sesję i utwórz nową. jeśli ta sesja została unieważniona przez limit czasu, następnym razem userSessionMap zawiera nazwę używaną i błąd unieważniający. więc jak to sprawdzić jest unieważnione?
Map appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
Map<String, HttpSession> userSessionMap = (Map<String, HttpSession>) appMap.get("USERS");
if (userSessionMap.containsKey(getUsername())) {
log.info(getUsername() + " already loggedin. Closing existing sesssion");
HttpSession sess = userSessionMap.get(getUsername());
sess.invalidate();
}
Odpowiedzi:
12 dla odpowiedzi № 1Spróbuj przejść false
jako parametr do getSession (boolean) . Spowoduje to zwrócenie sesji, jeśli istnieje lub wróci null
.
HttpSession session = request.getSession(false);
if(session==null || !request.isRequestedSessionIdValid() )
{
//comes here when session is invalid.
}
Zwraca bieżącą HttpSession powiązaną z tym żądaniem lub, jeśli nie ma bieżącej sesji i tworzenie jest prawdziwe, zwraca nową sesję. Jeśli tworzysz fałszywy a żądanie nie ma prawidłowej HttpSession, ta metoda zwraca zero.
8 dla odpowiedzi № 2
HttpSession session = request.getSession(false);
da IllegalStateException
jeśli sesja jest już unieważniona
boolean invalidated = false;
try {
request.getSession(false);
} catch(IllegalStateException ex) {
invalidated = true;
}