【问题标题】:GAE, GWT and HTTP SessionGAE、GWT 和 HTTP 会话
【发布时间】:2012-12-27 00:07:33
【问题描述】:

我正在构建一个基于 Google Application Engine (GAE) 和 Google Web Toolkit (GWT) 的 Web 应用程序。

客户端(GWT)通过以下方式与服务器交互:

  • 通过 RPC (servlet) 询问从服务器上托管的数据集中选择的图像的 URL;
  • 在浏览器中显示图像;
  • 将用户点击的点的坐标存储在一个临时结构中;
  • 当用户请求另一张图片时,客户端将用户点击的图片发送到服务器。

一旦服务器接收到用户点击,它将它们存储在数据库中,同时保存用户标识符。由于我不想使用任何形式的用户身份验证,因此我尝试使用 HTTP 会话来区分不同的用户。

HTTP 会话是在一个 servlet 中使用以下说明创建的:

public SessionInfo getSessionInfo() {
  HttpServletRequest request = this.getThreadLocalRequest();
  HttpSession session = request.getSession();
  if(session.isNew()) session.setMaxInactiveInterval(-1);

  Integer i = (Integer) session.getAttribute("access_count");
  if(i == null) {
    i = new Integer(1);
  } else {
    i = new Integer(i.intValue()+1);
  } // if
  session.setAttribute("access_count", i);  
  SessionInfo sInfo = new SessionInfo(session.getId(), i.intValue());
  return sInfo;
}

从文档中我了解到以下说明:

session.setMaxInactiveInterval(-1);

将使会话永不过期。但是,每次在浏览器上刷新页面时都会创建一个新会话。会话已启用。

我有两个问题:

  • 为什么刷新会导致创建新会话?旧的不应该保留吗?
  • 您对通过不同服务使用情况跟踪用户的更好方法有什么建议吗?

谢谢。

【问题讨论】:

标签: java google-app-engine gwt servlets


【解决方案1】:

我不明白为什么每次都会创建一个新会话,您的代码对我来说看起来不错。您可以尝试在web.xml 中设置超时,看看是否有什么不同:

<session-config>
  <session-timeout>-1</session-timeout>
</session-config>

【讨论】:

  • 重启解决了问题 - 我不知道是什么行为不端。
猜你喜欢
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多