Java/Servlet & JSP

Session 관리

체리필터 2009. 1. 30. 18:44
728x90
반응형

클라이언트와 지속적인 연결을 유지하지 못하는 것이 http protocol의 특징이므로, 이전 요청한 클라이언트와의 연결을 유지하기 위해서 Session을 사용한다.
컨테이너(톰캣) 단에서 Session ID를 발행하고, 해당 Session ID와 Cookie를 맵핑 한 다음 해당 쿠키를 클라이언트에서 사용하도록 하면 클라이언트를 구분해서 받을 수 있다.

* 세션 ID는 다음과 같은 방법으로 사용할 수 있다.

HttpSession session = request.getSession();

위와 같이 하게 되면, request로부터 세션 ID를 가지고 올 수 있고, 제일 처음 요청이라면 response 객체에 보낼 쿠키도 생성하게 된다.

* 세션이 이미 있는지, 아니면 처음 요청으로 새롭게 만들게 되었는지를 확인하려면 다음과 같이 하면 된다.

HttpSession session = request.getSession();

if(session.isNew()) {
    out.println("This is a new session");
} else {
    out.println("Welcome back!");
}

* 클라이언트가 쿠키를 사용하지 않을 경우에는 세션 ID를 URL 뒤에 붙여 보내줘서 쿠키 대신에 URL을 파싱해서 클라이언트를 구분하기도 한다.
URL 뒤에 세션 아이디를 붙여 보내기 위해서는 다음과 같이 하면 된다.

HttpSession session = reqeust.getSession();

out.printl("<a href=\"" + response.encodeURL("/BeerTest.do") + "\">click me</a>");


세션을 유지하면서 요청을 다른 서블릿이나 JSP로 보내고 싶은 경우에는 encodeRedirectURL()을 사용하면 된다.

* 오래된 세션은 세션 타임아웃을 web.xml에 설정하여 전체 세션에 적용해서 사용하거나, 메소드를 사용하여 특정 세션에서만 사용할 수 있다.
사용 방법은 다음과 같다.

web.xml에서 사용하는 방법

<session-config>
    <session-timeout>15</session-timeout>
</session-config>

특정 세션에서만 사용하는 방법

session.setMaxInactiveInterval(20*60);

 

web.xml에서는 분 단위로 적을 수 있고, setMaxInactiveInterval의 인자값으로 사용할 경우에는 초 단위로 사용할 수 있다.
위의 경우에는 15분 또는 20분이라는 의미이다.





728x90
반응형

'Java > Servlet & JSP' 카테고리의 다른 글

HttpSessionBindingListener와 HttpSessionAttributeListener  (0) 2009.02.02
Cookie 사용하기  (0) 2009.02.02
스레드 안전한 ServletContext 만들기  (1) 2009.01.29
ServletContext 이용하기  (2) 2009.01.23
ServletConfig 이용하기  (0) 2009.01.22