세션은 얼마나 지속될까?
기본 30분입니다. 웹서버마다 was마다 다른지는 모르겠지만 제가 아는 시간은 30분입니다.
실제 30분인지 테스트를 해볼까요.
아래 메소드를 RiaApp.java에 추가하고 로그인 성공했을 경우 실행되는 Success()메소드를 통해 호출해보도록 하자.
▶ 아래 코드는 60초 마다 서버에 세션이 유효한지 요청을 보내 세션을 확인하는 코드다. 진행 상태바를 통해 매분마다 1%씩 움직이도록 했다. 예상대로 세션이 30분이라면 30%까지 진행되다가 멈추게 될까? 테스트 해보면 100%를 보여주고 종료됩니다.
애기인 즉은 서버와 통신할 경우 세션이 유지되어 계속 access할 경우 무제한으로 사용할 수 있다는 것이다.
// RiaApp.java에 추가하세요
public void roop(){
String stime = new Date().toString();
final MessageBox box = MessageBox.progress("세션 시간 측정 중...", "시작시간은 : "+stime,
"Initializing...");
final ProgressBar bar = box.getProgressBar();
final Timer t = new Timer() {
float i;
@Override
public void run() {
String stime = new Date().toString();
System.out.println("middle time: "+ stime);
// continueSession();
try{
service.getSessionData( new AsyncCallback() {
@Override
public void onSuccess(Void result) {
}
@Override
public void onFailure(Throwable caught) {
String time = new Date().toString();
MessageBox.alert("로그인", "세션이 종료되었습니다. \n 종료시간:"+ time, btnListener);
cancel();
// box.close();
}
});
}catch(Throwable e){
}
bar.updateProgress(i / 100, (int) i + "% Complete");
i += 1;
if (i > 100) {
cancel();
box.close();
}
}
};
t.scheduleRepeating(60000); // 60초
}
// 로그인 성공 후 실행되어야 하므로 기존 onSubmit()메소드를 수정하자.
public void onSubmit() {
service.getSessionData( new AsyncCallback() {
@Override
public void onFailure(Throwable caught) {
// 버튼 리스트를 설정
MessageBox.alert("로그인", "세션이 종료되었습니다. \n 다시 로그인 해주세요", btnListener);
}
@Override
public void onSuccess(Void result) {
// TODO Auto-generated method stub
roop(); // 추가
}
});
}
▶ 아래 처럼 진행되다가..100%를 채우고 종료된다...
로그를 보면 세션유지시간은 30분이지만 계속 연장되어진다.
----------------------------------------------
middle time: Thu Mar 10 12:44:17 KST 2011
로그인 아이디는 :
benneykwag@gmail.com
세션 생성시간 : Thu Mar 10 11:11:02 KST 2011
설정된 세션유지시간: 30
마지막 AccessTime :Thu Mar 10 12:43:17 KST 2011
----------------------------------------------
▶ 이번에는 세션이 끊기도록 코딩해서 Refresh나 서버와 통신을 하지 않고 얼마나 유지되는지 보자.
위에서 60초로 테스트 했다면 이번에는 35분으로 변경해 보자.
// RiaApp.java
public void roop(){
...
...
t.scheduleRepeating(60000*35); //35분
}
// RiaAppPgmServiceImpl.java
@Override
public void getSessionData() throws Throwable {
HttpSession session = getSession();
if( null == session.getAttribute("loginid")) // index.html페이지에서 전달해주고 loginChk.jsp에서 생성한 세션정보
throw new Throwable("세션이 종료되었습니다.");
else{
System.out.println("로그인 아이디는 : "+(String)session.getAttribute("loginid"));
System.out.println("세션 생성시간 : "+ new java.util.Date(session.getCreationTime()) );
System.out.println("설정된 세션유지시간: "+ session.getMaxInactiveInterval()/60);
System.out.println("마지막 AccessTime :"+ new java.util.Date(session.getLastAccessedTime()));
System.out.println("----------------------------------------------");
}
}
이제 실행해보자. 35분 후 세션이 종료되었는지 유지되고 있는지 테스트 해보면 알수 있겠다.