프로그래밍 언어/자바 웹

서블릿에서 세션 API 이용하기

· 코딩마이데이

1. 다음과 같이 세션 테스트를 위한 실습 파일인 SessionTest 클래스를 준비합니다.

실습 파일 위치

 

2. SessionTest 클레스를 다음과 같이 작성합니다. request의 인지 없는 getSession() 메서드를 호출하여 세션이 없으면 새로 생성하고, 세션이 있으면 기존 세션을 가져옵니다. 또한 세션 객채의 getMaxInactiveInterval()를 호출하여 생성된 세션의 유효 시간을 가져옵니다.

package sec03.ex01;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

@WebServlet("/sess")
public class SessionTest extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		HttpSession session = request.getSession();
		out.println("세션 아이디 : " + session.getId() + "<br>");
		out.println("최초 세션 생성 시각 : " + new Date(session.getCreationTime()) + "<br>");
		out.println("최근 세션 접근 시각 : " + new Date(session.getLastAccessedTime()) + "<br>");
		out.println("세션 유효 시간 : " + session.getMaxInactiveInterval() + "<br>");
		if (session.isNew()) {
			out.print("새 세션이 만들어졌습니다.");
		}
	}
}

 

3. 브라우저에 최초 요청 시 생성된 세션 객체에 할당된 세션 id와 여러 가지 정보를 출력합니다. 최초 생성된 세션이므로 "새 세션이 만들어졌습니다."라고 메시지가 출력됩니다.

최초 사용 시 출력하는 세션 정보

 

4. 같은 브라우저에서 다른 탭을 열고 요청하면 같은 세션 id를 출력하므로 최초 생성된 세션을 재사용합니다. 따라서 "새 세션이 만들어졌습니다."라는 메시지는 출력되지 않습니다.

다른 탭에서 재요청 시 출력 결과

 

다음은 서블릿에서 생성된 세션 id, 즉 브라우저로 전송되어 세션 쿠키에 쿠키 이름 jsessionID로 저장된 세션 id입니다.

브라우저 세션 쿠키에 저장된 세션 id