참고글



세션(Session)
세션은 접속한 사용자의 상태를 담은 객체입니다. stateless인 HTTP의 특성상 브라우저는 웹서버와의 관계에서 접속중이라는 개념이 없고 매번 HTTP요청을 통해 잠깐 접근했다가 응답이 오면 접근을 끊어버리기 때문입니다.

따라서 아파치 웹서버나 톰캣같은 서블릿 컨테이너는 웹환경에서 사용자가 접속중이다 라는 개념이 없으므로 특별한 방식을 사용합니다. 그것은 세션 객체를 생성해두고 일정시간(TIMEOUT)내에 클라이언트가 HTTP 요청을 보낸경우 아직 사용자가 떠나지 않았다고(접속중) 판단하는 방법입니다.


Timeout
클라이언트가 서버에 접근하고 최초에 세션이 생성되면 해당 세션객체는 Timeout값을 가지게 됩니다. timeout값은 세션객체의 수명입니다. 그러나 생성직후 timeout만큼 시간이 지나 세션객체가 소멸하는것이 아닌 사용자가 서버에 마지막으로 요청을 보낸이후 timeout 만큼 아무런 요청이 없는 경우 세션객체를 소멸시킵니다.

여기서 클라이언트의 마지막 접속시간(http 요청시각)은 Access Time이라는 값으로 관리합니다. 즉 Access Time에서 Timeout만큼 지난 시간동안 아무런 요청이 없는 경우 해당 사용자는 접속을 끊은것으로 보고 세션 객체를 소멸시킵니다. 자세한 내용은 상단 참고글 링크를 통해 확인 부탁드립니다.

 

 



세션의 Timeout 설정 및 적용 우선순위
JSP/Servlet에서 모든 세션 객체는 Timeout값을 가지고 있으며 따로 설정해주지 않는 경우 기본적으로 30분입니다.

또한 웹어플리케이션이나 톰캣같은 서블릿컨테이너등의 설정으로 여러곳에서 세션 Timeout을 지정할 수 있기때문에 어느 설정이 우선적용되는지 알아두는것이 좋습니다.



가장 높은 순위는 setMaxInactiveInterval(int interval) 메서드로 지정한 경우
만약 다음과 같이 특정 세션객체에 직접 setMaxInactiveInterval(int interval) 메서드를 통해 timeout을 지정한 경우 해당 값이 가장 우선순위로 적용됩니다. 단 이 경우 timeout값의 단위는 분 단위가 아닌 초(second) 단위임에 주의합니다.
<%   
     session.setMaxInactiveInterval(1800);
%>
cs



두번째 우선순위는 WEB-INF/web.xml에 설정된 timeout값
웹 어플리케이션의 배포서술자인 web.xml을 통해 timeout 지정이 가능하며, 이곳에 설정된 timeout값이 두번째 우선순위를 갖습니다. 즉 앞서 말한  setMaxInactiveInterval() 메서드를 사용하지 않았다면 이 설정을 통해 지정된 timeout이 설정됩니다. 이곳의 timeout 설정 단위는 분 단위입니다.
<session-config>
    <session-timeout>30</session-timeout>
</session-config>
cs



세번째 우선순위는 [톰캣 설치 디렉터리]/conf/web.xml에 설정된 timeout값
톰캣의 conf 디렉터리에는 웹어플리케이션과 마찬가지로 web.xml 파일을 가지고 있고, 이곳에 여러가지 기본 설정이 담겨있습니다. 물론 웹어플리케이션의 WEB-INF/web.xml이 우선순위를 갖기에 우리는 이 설정파일을 신경쓰지 않아도 되지만 conf/web.xml에도 세션의 Timeout 설정이 있고 웹어플리케이션에서 아무런 설정을 하지않는경우 이곳에 설정된 기본값인 30분이 적용됩니다.
<session-config>
    <session-timeout>30</session-timeout>
</session-config>
cs

추가적으로 timeout값은 -1로 지정한경우 세션은 강제로 제거해주지 않는한 무한으로 유지됩니다. 그러나 메모리관리나 보안상 좋지 않으므로 자주 사용하는 설정은 아닙니다.



다음글

블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

댓글을 달아 주세요! 질문 환영합니다!