JSP 세션 데이터 삭제 방법 개요
웹 애플리케이션에서 사용자의 세션 데이터를 더 이상 사용할 필요가 없어지면, 상황에 맞는 적절한 방법으로 세션을 정리해야 합니다. JSP와 서블릿 환경에서는 다음과 같은 다섯 가지 방법을 활용할 수 있습니다.
1. 특정 속성만 삭제하기
세션 전체가 아닌 특정 키에 해당하는 값만 제거하고 싶다면 removeAttribute(String name) 메서드를 호출하면 됩니다. 이 메서드는 지정한 이름의 속성과 그에 연결된 값을 세션에서 삭제합니다.
session.removeAttribute("userName");2. 세션 전체 무효화하기
세션에 저장된 모든 데이터를 한 번에 폐기하고 싶다면 invalidate() 메서드를 사용합니다. 이 메서드를 호출하면 해당 세션이 완전히 무효화되며, 세션에 바인딩된 모든 객체가 함께 제거됩니다.
session.invalidate();
3. 세션 타임아웃 설정하기
개별 세션마다 유휴 상태 유지 시간(타임아웃)을 지정하고 싶다면 setMaxInactiveInterval(int interval) 메서드를 호출합니다. 인자로 전달되는 값은 초 단위이며, 지정한 시간 동안 클라이언트의 요청이 없으면 세션이 자동으로 만료됩니다.
session.setMaxInactiveInterval(1800); // 30분
4. 로그아웃 처리하기
서블릿 2.4 이상을 지원하는 서버에서는 logout() 메서드를 호출하여 클라이언트를 웹 서버에서 로그아웃 처리할 수 있습니다. 이 경우 해당 사용자와 관련된 모든 세션이 무효화됩니다.
5. web.xml에서 세션 타임아웃 구성하기
Tomcat을 사용하는 경우, 위의 프로그래밍 방식 외에도 web.xml 파일에서 세션 타임아웃을 직접 설정할 수 있습니다.
<session-config>
<session-timeout>15</session-timeout>
</session-config>
여기서 타임아웃 값은 분 단위로 표현되며, Tomcat의 기본값인 30분을 덮어씁니다. 위 예제에서는 세션 타임아웃이 15분으로 설정됩니다.
getMaxInactiveInterval() 메서드의 반환값
서블릿에서 getMaxInactiveInterval() 메서드를 호출하면 해당 세션의 타임아웃 기간이 초 단위로 반환됩니다. 예를 들어 web.xml에서 세션 타임아웃을 15분으로 설정했다면, getMaxInactiveInterval()은 900(15분 × 60초)을 반환합니다.
마무리
세션 관리는 보안과 리소스 효율성 측면에서 매우 중요합니다. 로그아웃 시에는 invalidate() 또는 logout()으로 세션을 확실히 무효화하고, 일반적인 세션 만료 정책은 web.xml 또는 setMaxInactiveInterval()을 통해 일관되게 관리하는 것이 좋습니다.