GAE,GWT和HTTP会话

时间:2013-01-12 15:04:50

标签: java google-app-engine gwt servlets

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

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

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

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

使用以下指示在servlet中创建HTTP会话:

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);

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

我有两个问题:

  • 为什么刷新会导致创建新会话?不应该保留旧的吗?
  • 您是否有更好的方法来跟踪不同用户使用的用户?

感谢。

1 个答案:

答案 0 :(得分:0)

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

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