세션이 종료되는 3가지 이유

 

시간이 다 되어서(타임 아웃)

개발자가 세션 객체에 invalidate()메소드를 실행하는 경우.

애플리케이션이 다운되는 경우(문제가 생기거나, 언디플로어 되는 경우)

 

 

DD에서 세션 타임아웃 설정하기

DD에서 설정하는 타임아웃은 생성되는 모든 세션에 setMaxInactiveInterval()메소드를 호출하는 것과도 같습니다.

 

<web-app....>

 <servlet>

 ...

 </servlet>

 <session-config>

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

 </session-config>

</web-app>

15는 15분을 의미합니다. 클라이언트가 15분동안 요청이 없으면 제거하라는 의미 입니다. 제거 한다는 것은 클라이언트를 제거하는 것이 아니라 세션만 제거 하는 것을 의미 합니다.

DD상의 타임아웃 단위는 분입니다. 타임아웃의 단위들은 일치하지 않습니다. DD에서는 분단위고 프로그램 내부에서는 초단위 입니다.

 

특정 세션만 타임아웃 설정하기

특정 세션 인스턴스만 세션 타임아웃 값을 변경할 수 있습니다. 다른 세션의 타임아웃 값은 바뀌지 않습니다.

 

session.setMaxInactiveInterval(20*60);

인자값은 초다윈 시간입니다. 위 코드는 20분동안 요청이 없으면 제거한다는 의미 입니다.

 

간단한 예제

 

public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException{

 response.setContentType("text/html");

 PrintWriter out = response.getWriter();

 HttpSession session = request.getSession();

 session.setAttribute("foo", "42");

 session.setAttribute("bar", "420");

 session.invalidate();

 String foo = (String)session.getAttribute("foo");

 out.println("Foo : " + foo);

}

위의 예제에서는 session.invalidate()를 호출한 시점에서 세션은 무효화 되었습니다. 그래서 그 이후 session.getAttribute를 호출할때 런타임 익셉션이 발생되어 IllegalStateException이 던져 집니다.

 

 

public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException{

 response.setContentType("text/html");

 PrintWriter out = response.getWriter();

 HttpSession session = request.getSession();

 session.setAttribute("food", "42");

 session.setMaxInactiveInterval(0);

 String foo = (String)session.getAttribute("foo");

 if(session.isNew()){

  out.println("This is a new session.");

 } else{

  out.println("Welcome back!");

 }

 out.println("Foo : " + foo);

}

 

문제의 원인은 session.setMaxInactiveInterval(0);에 있습니다. 이말은 세션을 곧바로 타임아웃 하라는 말입니다. 세션이 무효화 된 다음에는 isNew()메소드를 호출 할 수 없습니다. 이런경우 IllegalStateException이 발생됩니다. 최대 비활성화 시간 간격을 0으로 설정하는 것은 세션을 타임아웃하고 곧바로 무효화 하라는 의미 입니다.


출처 - http://blog.naver.com/khagaa/30028163330


Posted by linuxism
,