GXT RIA App 만들기2011. 3. 7. 18:14
세션은 얼마나 지속될까?
기본 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분 후 세션이 종료되었는지 유지되고 있는지 테스트 해보면 알수 있겠다.
Posted by 베니94