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 1 베니94

댓글을 달아 주세요

  1. 다니엘후니

    좋은 강좌 잘 보고 있습니다.
    이번 프로젝트에 GXT 적용해서 하는데 많은 레퍼런스가 없어서 고생(?) 좀 하고 있습니다.
    여기 강좌 보면서 많은 부분 해결했습니다. 좋은 강좌 계속 부탁합니다. ^^

    2011.04.20 11:31 [ ADDR : EDIT/ DEL : REPLY ]
  2. 네 잘보셨다니 다행입니다. 제가 요즘 프로젝트때문에 강좌연재를 못하고 있는 상황입니다.
    이번에는 ExtJS를 이용할 계획이라 extjs관련 글만 겸사겸사 정리해서 올리고 있는 실정입니다.
    빠른 시일내로 연재를 시작하도록 하겠습니다.

    2011.05.20 16:54 신고 [ ADDR : EDIT/ DEL : REPLY ]
  3. 관심

    글 잘 봤습니다. 고생 많이 하셨네요.
    Ext GWT는 생각보다 코딩 양이 많은것 같습니다. UI 그리는 도구(Designer)가 있으면 참 좋겠다고 생각해 봅니다.

    2011.11.27 01:27 [ ADDR : EDIT/ DEL : REPLY ]
    • Gui 용 플러그인이 존재합니다.
      제가 한참 gwt개발할 시기에는 그리
      완성도가 높이 않았지만 현재는
      좀 개선되었을 것으로 예상됩니다.

      그러나 어차피 소스자체를 수정해야만 하기
      때문에 툴에 의존하기 보다는 소스를 통해 UI를
      그리는 것이 좋지 않을까 싶습니다.

      2011.12.07 16:35 신고 [ ADDR : EDIT/ DEL ]
  4. 행인

    매번 잘보고 갑니다.
    gwt ext 자료를 한국에서 구하기 힘들었는데

    매번 잘보고 있습니다.^^

    감사합니다.

    2014.02.05 14:14 [ ADDR : EDIT/ DEL : REPLY ]