본문 바로가기

자바환경설정

[JAVA] Web session timeout 설정

Web Application에서 session 의 timeout 시간은 Servlet Spec.에 명시된 web.xml에 지정합니다. 시간 단위는 분입니다.

CONTEXT/WEB-INF/web.xml에 session timeout 설정이 없는 경우에는 JEUS의 Servlet Engine에서 가지고 있는 webcommon.xml에 설정된 값이 적용되고,
이것도 설정이 안된 경우에는 $JEUS_HOME/config/[HOSTNAME]/[SERVLET_ENGINE_NAME]/WEBMain.xml에 설정된 값이 적용되게 됩니다.

session timeout의 우선 순위는 다음과 같습니다.

1. CONTEXT/WEB-INF/web.xml의
---------------------
<web-app>
...
<session-config>
<session-timeout>30</session-timeout>
</session-config>
...
---------------------

2. SERVLET_ENGINE/webcommon.xml
---------------------
<web-app>
...
<session-config>
<session-timeout>30</session-timeout>
</session-config>
...
---------------------

3. SERVLET_ENGINE/WEBMain.xml
---------------------
<web-container>
<context-group>
...
<session-config>
<timeout>20</timeout>
<shared>true</shared>
</session-config>
...
---------------------
/*******************************************/

JEUS에서 세션의 타임아웃은 HTTPSession.invalidate()메소드가 호출되지 않는 이상, 세션체크타임아웃 설정값에 설정된 시간마다 체크하여 세션을 invalidate시키게 됩니다.

해당 설정값은 WEBMain.xml의 web-container > monitoring > check-session 이며

<check-session>60000</check-session>

와 같이 설정하면 60초마다 세션타임아웃을 체크한다는 말입니다.

이값은 별도의 설정이 없을 경우, Default값인 5분(300000mc)이 적용되므로 세션타임아웃을 2분으로 설정하여도 최소 세션타임아웃체크시간인 5분 이상이 되어야 세션매니저의 의해 세션의 invalidate가 발생합니다.

따라서, 세션타임아웃을 5분이하로 세팅하실경우, 이 check-session 을 더 적게 잡아주셔야합니다.

참고로 check-session 이 길면 길수록 퍼포먼스가 향상됩니다.

<<WEBMain.xml>>

<web-container>
<monitoring>
<check-thread-pool>60000</check-thread-pool>
<check-class-reload>60000</check-class-reload>
<check-session>120000</check-session>
<check-db-connection-pool>60000</check-db-connection-pool>
</monitoring>
<context-group>
<group-name>MyGroup</group-name>
<group-docbase>web</group-docbase>
<session-config>
<timeout>60</timeout>
<shared>true</shared>
<persistent>true</persistent>
</session-config>

=============================================================================

JEUS4.2에서는 web.xml의 session-timeout설정보다WEBMain.xml의 timeout값이 우선시 되어 적용됩니다. WEBMain.xml에 timeout설정이 없을경우, web.xml의 session-timeout을 참조하며 가장 나중에 webcommon.xml파일의 session-timeout값을 찾게 되어있습니다.

따라서 설정하신 파일중 WEBMain.xml의 세션설정을

참고로 javax.servlet.http.HttpSession.getMaxInactiveInterval()메소드를 사용하시면 현재 세션에 세팅된 세션타임아웃값을 출력해 볼 수 있으니 WEBMain.xml webcommon.xml, web.xml의 세션타임아웃값에 각기 다른 값을 설정해놓고 어떤값이 적용되는지 직접 확인해 보시는것도 좋을 것 같습니다.