0

我正在尝试向 GWT 会话添加超时,方法是使用以下代码检查会话是否处于活动状态:

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

我将此代码基于我在网上看到的 GWT 会话的许多示例,例如this

上面的代码在本地网络服务器上运行时效果很好,但在将项目部署到 App Engine 后就不行了。以下在 App Engine 上始终返回 0:

getThreadLocalRequest().getSession().getLastAccessedTime()

据我了解,每次 RPC 调用都会更新上次访问时间。我打了几个电话,但这个值仍然为零,并且返回了不正确的结果。

有谁知道如何解决这个问题?

4

2 回答 2

3

部署到 GAE 后情况会发生变化

就在今天参加了@roman irani 的应用引擎会议。

请记住,App Engine 是一种分布式架构,因此与 Java EE 的不同之处在于,在请求处理期间,您永远无法保证与前一个请求相同的应用程序服务器实例。虽然对象在 memcache 中被正确序列化,但由于内存不共享,您仍然必须每次调用 setAttribute()。

此处清除图片以处理会话

于 2013-04-21T18:13:19.387 回答
0

我找到了一种解决方法。在 war/WEB-INF/web.xml 中添加以下代码将导致会话在 30 分钟后过期:

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

参考:GWT RPC 调用的会话超时

于 2013-04-23T13:12:15.497 回答