2013-04-21 4 views
0

내가 세션이 살아 있는지 확인하려면 다음 코드를 사용하여, GWT 세션에 시간 제한을 추가하기 위해 노력하고있어 반환 : 나는 많은 예에서이 코드를 기반GWT 세션의 getLastAccessedTime()는 0

public boolean isSessionAlive() { 
    return System.currentTimeMillis() - getThreadLocalRequest().getSession() 
.getLastAccessedTime() < timeout; 
} 

I this과 같은 웹에서 GWT 세션을 보았습니다.

위의 코드는 로컬 웹 서버에서 실행되는 동안 훌륭하게 작동하지만 프로젝트를 App Engine에 배포 한 후에는 효과가 없습니다. 다음은 App Engine에서 항상 0을 반환합니다.

getThreadLocalRequest().getSession().getLastAccessedTime() 

내가 이해하는 한, 마지막 액세스 시간은 각 RPC 호출에서 업데이트됩니다. 여러 번 호출했지만이 값은 여전히 ​​0으로 유지되고 잘못된 결과가 반환됩니다.

누구든지이 문제를 해결하는 방법을 알고 있습니까?

답변

0

나는 해결 방법을 발견했다. 전쟁/WEB-INF/web.xml에 다음 코드를 추가하면 세션 30 분 만료가 발생합니다

<!-- timeout in minutes --> 
<session-config> 
    <session-timeout>30</session-timeout> 
</session-config> 

참조 : Session Timeouts with GWT RPC calls합니다.

3

상황이 후 GAE에 배치 변경됩니다

그냥 오늘 @roman 이라니하여 응용 프로그램 엔진에 세션에 참석했다.

App Engine은 분산 아키텍처이므로 Java EE와 다른 점은 이전 요청과 마찬가지로 요청 처리 중에 동일한 애플리케이션 서버 인스턴스가 보장되지 않는다는 점입니다. 객체가 memcache에서 올바르게 직렬화되는 동안 메모리가 공유되지 않기 때문에 매번 setAttribute()를 호출해야합니다.

Clear cut picture here to handle the session

+0

나는 당신의 요지를 얻었지만 해결책은 무엇입니까? LastAccessedTime은 AppEngine에 의해 자동으로 업데이트되고 프로그래머가 업데이트하지 않아야합니까? – alexgo91

+0

@ alexgo91 방금 참석 한 세션이 끝난 후 앱 엔진에 대한 내 앱을 시작 했으므로 내 멍청한 놈이 여기에 있습니다. 문서가 https://developers.google.com/appengine/docs/java/runtime#The_Request_Timer에 불을 붙일 수 있습니다. –