我正在构建一个基于Google应用引擎(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);
将使会话永不过期。但是,每次在浏览器上刷新页面时,都会创建一个新的会话。会话被启用
我有两个问题:
- 为什么刷新导致创建新会话?旧的不应该保留吗?
- 你有什么更好的方法来跟踪不同用户使用服务吗?
谢谢。
我不明白为什么每次都创建一个新的会话,你的代码看起来很好。您可以尝试在web.xml
中设置超时,看看它是否有任何不同:
<session-config>
<session-timeout>-1</session-timeout>
</session-config>