티스토리 뷰

이상하게.. 세션, 즉, 중복로그인 처리 로직 중에서 에러가 나는 부분이 있었다. 삽질을 오래 하다가.. 세션 null 처리 때문이 원인인것을 알아냈다.

단순하게 세션이 null 만 체크하면 안된다. 세션이 null 이 아니면 continue 처리를 했는데, null이 아닌데 그 안에 요소를 접근하려고 하니 IllegalStateException 이 발생하였다. continue를 하려면 IllegalStateException에서 해야 한다.

null은 아니지만 그 안의 요소를 null 인듯 하다. 그러니 세션 null 만 처리 하면 안된다.

 

if (oldSession != null) {
    try {
        // 톰캣 9 이상에서는 만료된 세션일 경우 아래 메서드 실행 시 즉시 예외가 발생합니다.
        java.util.Enumeration<String> names = oldSession.getAttributeNames();
        
        System.out.println("=== HttpSession Attribute List ===");
        java.util.Collections.list(names).forEach(name -> {
            Object value = oldSession.getAttribute(name);
            System.out.printf("Key: %s | Value: %s%n", name, value);
        });
        System.out.println("==================================");
        
    } catch (IllegalStateException e) {
        // 💡 톰캣이 세션을 이미 만료시켰다고 판단한 경우, 에러로 튕기지 않고 안전하게 스킵합니다.
        System.out.println("[안내] 현재 oldSession이 이미 만료/무효화된 세션이므로 조회를 건너뜁니다.");
        // continue; // 만약 반복문(for/while) 내부라면 다음 루프로 넘어가도록 continue 실행
    }
} else {
    System.out.println("oldSession이 null입니다.");
}
HttpSession session = request.getSession();

session.invalidate(); // 👈 세션 알맹이를 파기함 (자물쇠 채움)

// ❌ 여전히 null이 아닙니다! 이 조건문은 통과해버립니다.
if (session == null) {
    System.out.println("이 글은 출력되지 않습니다.");
}

// 🚨 알맹이가 파기되었기 때문에 아래 줄에서 IllegalStateException 발생!
String id = session.getId();
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함