【问题标题】:getLastAccessedTime() in GWT sessions returns 0GWT 会话中的 getLastAccessedTime() 返回 0
【发布时间】:2013-04-21 17:37:10
【问题描述】:

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

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

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

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

getThreadLocalRequest().getSession().getLastAccessedTime()

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

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

【问题讨论】:

    标签: google-app-engine session gwt


    【解决方案1】:

    在 GAE 上部署后情况会发生变化

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

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

    Clear cut picture here to handle the session

    【讨论】:

    • 我明白你的意思,但有什么解决办法? LastAccessedTime 应该由 AppEngine 自动更新,而不是由程序员自动更新,不是吗?
    • @alexgo91 因为我刚刚在参加会议后启动了我的应用程序引擎应用程序,我自己在这里是个菜鸟。文档可以阐明developers.google.com/appengine/docs/java/…
    【解决方案2】:

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

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

    参考:Session Timeouts with GWT RPC calls

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-21
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 2023-03-10
      • 2023-04-08
      相关资源
      最近更新 更多