http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/package-summary.html Show 이곳에 보시면, 서블릿 컨텍스나 세션의 변화를 체크하여 리스너들이 있습니다. 리스너 인터페이스를 구현하여 클래스를 만들면 되구요 web.xml에 해당 리스너 클래스를 추가해 주시면 됩니다. package com.cafe24.youmasan.common; import java.sql.SQLException; import javax.servlet.http.HttpSession; public class LoggingListener public LoggingListener() { public void sessionCreated(HttpSessionEvent hse) {
HttpSession session = hse.getSession(); } 세션의 변화를 체크하기 위해 HttpSessionListener인터페이스를 구현해 리스너 클래스를 만들구요 web.xml <web-app>태그안에 </servlet> 리스너를 등록해 주시면 됩니다. 중간에 session.setMaxInactiveInterval(60*30);//초단위로 세션유지 시간을 설정합니다 설정을 통해 세션의 생명시간을 설정해 줄수 있습니다. 브라우저가 닫힐경우 session.invalidate()같은 세션종료 명령을 서버에 보내주지 못합니다. 그렇게 때문에 서버는 브라우저와 세션의 연결이 끊겼다는 사실을 모르고 마냥 요청을 기다리게 됩니다. 세션의 생명시간동안 응답이 없다면 그제서야 서버는 닫힌 브라우저와의 세션을 종료합니다. 인터페이스를 구현한 public void sessionDestroyed(HttpSessionEvent hse) {} 메소드안에서 세션종료시 처리 로직을 추가해 주시면 됩니다. 출처 - http://blog.daum.net/nationisone/8197009
쿠키만 사용하여 유저의 정보를 유지하는 방법서버와 클라이언트의 대화
쿠키 구현하기 Response.setCookie()
쿠키의 심각한 보안문제쿠키에는 굉장히 심각한 보안문제가 존재한다. 첫번째로 단순히 서버에 전송하는 쿠키를 조작하여 서버에 옳지 않은 요청을 시도할 수도 있다. 위의 문제들을 손쉽게 해결하기 위해 보통은 쿠키와 세션을 같이 사용한다. 한번 자세히 알아보도록 하자.
쿠키와 세션을 통해 유저의 정보를 유지하는 방법쿠키의 보안문제를 해결하기 위해서는 결국 매핑될 임의의 값을 유저에게 전해주고 중요한 정보들은 모두 서버에서 관리해야 한다는 것을 알 수 있다. 서버와 클라이언트의 대화
위와 같이 세션을 사용함으로서 해결되는 문제는 다음과 같다. 세션 구현하기깊은 이해를 위해 직접 세션을 구현해보자. 좀 더 쉬운 이해를 위해 서버와 클라이언트의 대화와 로직을 매칭 시켜봤다.
우선 클라이언트에게 가져온 쿠키 목록으로부터 내가 필요로 하는 쿠키를 뽑아내야 한다. 그렇게 뽑아낸 쿠키로부터 위와 같이 세션을 직접 일일히 구현하는 것은 상당히 불편하다. 개발자들은 불편한 것을 절대로 좋아하지 않는다. 따라서 서블릿도 세션 자체를 지원한다. 한번 알아보도록 하자. 서블릿이 제공하는 HttpSession서블릿은 세션을 제공하기 위해
세션을 생성 했으니 세션을 사용하는 방법을 알아보자.
서블릿에서 제공하는
TrackingModes로그인을 처음 시도하면 URL 뒤에
이것은 웹 브라우저가 쿠키를 지원하지 않을 때, 쿠키 대신에 URL을 통해서 세션을 유지하는 방법이다. 이 방법을 통해 쿠키를 지원하기 위해서는 모든 URL 뒤에 물론 위의 옵션을 아래와 같은 설정을 통해 없앨 수 있다.
세션 타임아웃 설정보통 로그아웃시에 이렇게 되면 서버에서 세션을 메모리에 저장하여 관리하는데, 수천, 수만명의 세션이 계속 쌓이게 되어 서버가 터져 버릴수도 있다. 또한 무한정 남아있는 쿠키를 해커에게 탈취 당해 악의적인 요청을 당할 수 있다. 즉, 세션을 일정시간이 지나면 자동으로 삭제 되도록 처리해야만 한다.
그렇다면 세션을 언제 종료시켜야 할까?만약 간단하게 일정 시간마다 세션을 삭제시키면 계속 사용하던 사용자는 갑자기 로그아웃 되는 불편한 상황을 맞이하게 될 것이다. 그렇다면 어떤 시점에 종료해야 사용자가 불편함을 느끼지 않게끔 세션을 종료시킬 수 있을까? 사용자가 서버에 요청한 시간을 기준으로 시간을 계산하여 종료한다. 생명주기 설정법을 알아보자, 글로벌한 설정법과 세션마다 설정할 수 있는 설정법이 있는데 우선 글로벌 설정법 부터 알아보자.
다음은 특정 세션만 지정하는 경우이다.
1800초로 지정하게 되면 최근 세션 접근 시간 (
|