我们正在开发Java-Gwt Web应用程序,我们有一个登录页面来访问该应用程序。最近我们面对了 一种情况如下所述。
1)用户在一个浏览器窗口(例如Chrome)中打开应用程序,登录页面将显示给用户。 2)用户再次在另一个浏览器窗口(例如Chrome)中打开相同的应用程序,并且还会向用户显示登录页面。
这里,用户输入登录凭据并从第一个浏览器窗口访问应用程序,然后再次用户输入 第二个浏览器窗口中的不同登录凭据并访问该应用程序。这里我们已经打开两个不同的应用程序 即使浏览器实例相同,也会在2个浏览器窗口中显示凭据。
如果我们确实如此,我们将按照我们的实施进入不一致状态。
在上述情况下,最好的做法是什么?
我观察过Gmail'应用上述情况,如果用户登录第一个窗口,则重新加载第二个窗口。
如果我们考虑使用Gmail'如何从GWT或JavaScript中的第一个窗口检测第二个浏览器窗口是一个很好的例子吗?
任何建议都会很棒。
答案 0 :(得分:0)
好的,我误解了你的问题。因此,您正确实施了cookie / HTTP会话,并发生以下情况:
这种行为都没有表明存在问题,但您希望能够检测到这种情况何时发生(或至少步骤1-3)。为此,我建议在身份验证后在会话/ cookie中存储有关用户的内容,例如ID(您可能已经这样做了)。在HTTP会话/ cookie中设置此值时,首先检查其中是否已存在非空值。如果是这样,那么您已成功检测到上述方案。
所以经过身份验证之后,就像这样,其中request是HttpServletRequest:
Integer userId = (Integer) request.getSession().getAttribute("userId");
if (userId != null && userId != newlyAuthenticatedUserId) {
System.out.println("Second login from same browser!");
}
request.getSession().setAttribute("userId", userId);