2013-04-21 20 views
0

我想超時添加到GWT會議,通過使用下面的代碼來檢查會話存活:getLastAccessedTime()在GWT會議返回0

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

我根據很多例子的代碼我在網絡上看到GWT會話,如this

上述代碼在本地Web服務器上運行時效果很好,但是在將項目部署到App Engine之後,它不會。在App Engine上總是返回0:

getThreadLocalRequest().getSession().getLastAccessedTime() 

據我所知,上次訪問的時間在每次RPC調用時更新。 我做了幾個調用,但是這個值仍然爲零,返回不正確的結果。

有誰知道如何解決這個問題?

回答

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 2013-04-23 09:32:45

+0

@ alexgo91因爲我剛剛開始我的應用程序引擎的應用程序後,我參加了會議,我自己一個noob here.The文檔可以在該https://developers.google.com/appengine/docs/java/runtime#The_Request_Timer – 2013-04-23 09:37:16