Servlet & Jsp

[ HttpSession 교환방식 & TimeOut 설정] - Head Frist Servlet & Jsp

사과씨앗 2020. 12. 24. 23:59
728x90
반응형

안녕하세요 이번 글에서는 session의 역할들을 알아보겠습니다.

 

 

1. 클라이언트와 컨테이너의 session 공유 방법

 

컨테이너는 클라이언트에게 요청에 대한 응답을 보낼 때 reponse 객체에 세션 ID를 보냅니다. 그러면 클라이언트는 이 세션 ID를 가지고 있다가. 다음 요청을 보낼 때 같은 세션 ID를 서버로 보내고 서버는 이것을 확인하여 같은 세션에서 온 요청임을 확인할 수 있습니다. 

 

세션 ID의 교환 방식은 두 가지가 있는데 첫 번째 방법은 Cookie에 세션 ID를 넣어서 보내는 방법입니다.

 

- Cookie 

위 그림처럼 request와 response의 헤더 값으로 세션 ID를 담아서 공유합니다.

 

하지만 클라이언트가 브라우저에서 쿠키를 사용하지 않는다고 설정을 했다면 서버와 클라이언트는 세션 ID를 어떻게 공유해야 할까요?

 

그럴 때 사용되는 두 번째 방법이 있습니다.

 

- URL 재작성

 

컨테이너는 클라이언트에게 최초 세션 ID를 보낼 시 쿠키에 세션 ID를 담아서 보내는 방법과 URL 뒤에 세션 ID를 더해서 보내는 두 가지 방법을 모두 사용합니다. 그런 다음 클라이언트의 요청에서 쿠키의 세션 ID를 찾이 못하였을 때 URL세션 ID를 사용합니다.

위 그림처럼 세션 ID을 URL에 더하여 사용합니다.

 

기본적으로 세션 ID는 컨테이너에서 관리하여 개발자가 만들거나 없애는 과정을 굳이 하지 않아도 됩니다. 

 

2. session 생성 유무 확인 및 TimeOut설정

 

세션 값이 새로 생긴 시점이나 소멸된 시점을 구분하여 보겠습니다.

 

//요청받은 세션값을 확인하거나 세션값을 새로생성할때 아래와 같이 코딩하여 줍니다.
		HttpSession session = request.getSession();
		
		//클아이언트가 세션ID로 응답하지 않았다면 즉 새로생된된 세션이라면 true를 반환합니다.
		if(session.isNew()) {
			System.out.println("New Session ID!!");
		}else {
			System.out.println("Welcome back!!!");
		}
		

 

//false를 넣어주게 되면 존재하는 세션을 넘겨주라는 의미이며 없을시 null을 반환 합니다.
		HttpSession session = request.getSession(false);
		//세션의 속성을 소멸시켜 줍니다.
		session.invalidate();
		
		if(request.getSession(false) == null) {
			System.out.println("No Session");
		}else {
			System.out.println("Welcome back!!!");
		}

 

 

다음은 session의 TimeOut을 설정하여 보겠습니다.

 

<!-- session timeout 서정 방법 -->
  <session-config>
 				 <!--안에 들어가는 숫자는 분 단위를 나타냅니다.  -->
	<session-timeout>15</session-timeout>  
  </session-config>
  

위처럼 web.xml에 직접 timeout을 지정할 수 있습니다.

 

HttpSession session = request.getSession();
//해당 세션객체를 호출한 세션만 따로 TIMEOUT을 지정 할 수 있습니다 (매개변수로 들어간 값은 초 단위를 뜻합니다. 20*60 = 20분)
session.setMaxInactiveInterval(20*60);

 

서블릿에서 직접 timeout 을 지정할 수도 있습니다.

 

session 객체로 이용할 수 있는 메소드 입니다.

감사합니다!! 

728x90
반응형