
- JSESSIONID란?
Java EE (Jakarta EE) 기반 웹 애플리케이션에서 세션을 식별하는 고유한 ID
- 세션 식별자: 사용자의 HTTP 세션을 추적하기 위해 생성됨
- 서버에서 관리: 보통 Tomcat, Jetty, WebSphere 등 Java 기반 WAS에서 자동 생성
- 클라이언트와 공유: 주로 쿠키 또는 URL 리라이트(URL Rewriting)로 클라이언트에게 전달됨
- JSESSIONID 동작 방식
1) 클라이언트가 서버에 최초 요청
- 사용자가 웹사이트에 처음 접속하면 서버가 새로운 세션을 생성
- 이때 JSESSIONID라는 고유한 세션 ID가 발급됨
2) 서버가 JSESSIONID를 응답에 포함
- 기본적으로 쿠키 방식을 사용 (Set-Cookie: JSESSIONID=xyz123; Path=/; HttpOnly)
- 만약 쿠키가 비활성화된 경우 URL 리라이트 방식으로 전달 (https://example.com/page;jsessionid=xyz123)
3) 클라이언트가 이후 요청 시 JSESSIONID 포함
- 서버는 JSESSIONID를 확인해 동일한 세션을 유지
4) 세션 유지 & 만료
- 서버 설정에 따라 세션 유지 시간이 결정됨 (web.xml에서 session-timeout 설정 가능)
- 사용자가 일정 시간 동안 활동이 없으면 세션이 만료되고, 이후에는 새로운 JSESSIONID가 발급됨
- JSESSIONID 설정 및 확인
1) 세션 유지 시간 설정 (web.xml)
<session-config>
<session-timeout>30</session-timeout> <!-- 30분 -->
</session-config>
2) Java에서 JSESSIONID 가져오기
HttpSession session = request.getSession();
String sessionId = session.getId();
System.out.println("JSESSIONID: " + sessionId);
3) URL 리라이트 적용 (web.xml)
<context-param>
<param-name>disableURLRewriting</param-name>
<param-value>false</param-value>
</context-param>
- JSESSIONID 보안 주의사항
1) HttpOnly & Secure 속성 설정
- HttpOnly: JavaScript에서 접근 불가능하게 설정 (XSS 공격 방지)
- Secure: HTTPS에서만 쿠키 전송 허용
Cookie jsessionCookie = new Cookie("JSESSIONID", session.getId());
jsessionCookie.setHttpOnly(true);
jsessionCookie.setSecure(true);
response.addCookie(jsessionCookie);
2) 세션 고정 공격(Session Fixation) 방지
- 로그인 시 새로운 JSESSIONID를 발급
session.invalidate(); // 기존 세션 무효화
HttpSession newSession = request.getSession(true); // 새 세션 생성
3) 세션 타임아웃 적절히 설정
- 너무 길면 보안 취약, 너무 짧으면 사용자 불편