프로그래밍 언어/자바 웹

다른 브라우저에서 새 세션 만들기

· 코딩마이데이

브라우저에서 Ctrl + Shift + N을 눌러 스크릿 모드의 크롬을 실행합니다.

크롬을 스크릿 모드로 실

 

주소창에서 /sess로 요청하면 새로운 세션을 생성한 후 다른 세션 id를 출력합니다.

/sess로 요청 시 새로운 세션이 생성

 

세션 기본 유효 시간은 톰캣 컨테이너에서 지정한 30분(1800)초입니다. 그러나 HttpSession의 setMaxInactiveInterval() 메서드를 이용하면 사용자가 원하는 세션 유효 시간을 설정할 수 있습니다. 그리고 invalidate()의 메서드를 이용하면 새션을 언제든지 삭제할 수도 있습니다.

다음과 같이 톰캣 컨테이너의 web.xml에 세션 유효 시간이 설정된 것울 확인할 수 있습니다.

기본 유효 시간이 30분으로 설정

 

이번에는 제공되는 메서드들을 이용해서 직접 세션 유효 시간을 재설정해보겠습니다.

1. 다음과 같이 SessioTest2 클래스를 준비합니다.

실습 파일 위치

 

2. SessionTest2 클래스를 다음과 같이 작성합니다. setMaxInactiveInterval() 메서드를 이용해 세션 유효 시간을 5초로 재설정합니다.

package sec03.ex02;

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("/session2")
public class SessionTest2 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>");
		session.setMaxInactiveInterval(5);
		out.println("세션 유효 시간 : " + session.getMaxInactiveInterval() + "<br>");
		if (session.isNew()) {
			out.print("새 세션이 만들어졌습니다.");
		}
	}
}

 

3. 최초에 /sess2로 요청하여 설정 전 유효 시간과 설정 후 유효 시간을 출력합니다.

최초 요청 시 결과

4. 5초가 지난 후 같은 브라우저에서 재요청하면서 다시 새 세션이 생성됩니다.

5초 경과 후 요청 시 결과

 

최초 요청 시 세션의 id와 5초 경과 후 요청 시 세션의 id가 다릅니다. 즉, 5초 이후에는 기존 세션은 삭제되고 재요청 시 세션이 생성됩니다.

 

이번에는 사용자가 강제로 세션을 삭제하는 기능을 실습해 보겠습니다.

1. 다음과 같이 실습 파일을 준비합니다.

실습 파일

 

2. SessioTest3 클래스를 다음과 같이 작성합니다. invalidate() 메서드를 이용해 강제로 세션을 삭제합니다.

package sec03.ex03;

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.sql.Date;

@WebServlet("/sess3")
public class SessionTest3 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("새 세션이 만들어졌습니다.");
		}
		session.invalidate();
	}
}

 

3. 최초 요청 시 새 새션이 생성된 후 invalidate() 메서드가 호출되므로 바로 소멸됩니다.

최초 요청 시 결과

 

5. 재요청 시 다른 세션이 생성됩니다.

재요청시 결과