Java 如何检测浏览器窗口是否已从其他浏览器窗口打开?
我们正在开发JavaGWTWeb应用程序,我们有一个登录页面来访问该应用程序。最近我们面临着 下面描述的一个场景 1) 用户在一个浏览器窗口(比如Chrome)中打开应用程序,登录页面将显示给用户。 2) 用户再次在另一个浏览器窗口(比如Chrome)中打开同一个应用程序,登录页面也会显示给用户 在这里,用户输入登录凭据并从第一个浏览器窗口访问应用程序,然后再次输入 在第二个浏览器窗口中显示不同的登录凭据并访问应用程序。在这里,我们已经打开了两个不同的应用程序 两个浏览器窗口中的凭据,即使浏览器实例相同 如果我们像上面那样做,那么根据我们的实现,我们将进入不一致状态 在上述情况下,最好的做法是什么 我在“Gmail”应用程序中观察到上述情况,如果用户登录第一个窗口,它将重新加载第二个窗口 如果我们考虑Gmail是一个很好的例子,那么如何从GWT或JavaScript中的第一个窗口检测第二个浏览器窗口?Java 如何检测浏览器窗口是否已从其他浏览器窗口打开?,java,javascript,gwt,web-applications,browser,Java,Javascript,Gwt,Web Applications,Browser,我们正在开发JavaGWTWeb应用程序,我们有一个登录页面来访问该应用程序。最近我们面临着 下面描述的一个场景 1) 用户在一个浏览器窗口(比如Chrome)中打开应用程序,登录页面将显示给用户。 2) 用户再次在另一个浏览器窗口(比如Chrome)中打开同一个应用程序,登录页面也会显示给用户 在这里,用户输入登录凭据并从第一个浏览器窗口访问应用程序,然后再次输入 在第二个浏览器窗口中显示不同的登录凭据并访问应用程序。在这里,我们已经打开了两个不同的应用程序 两个浏览器窗口中的凭据,即使浏览器
任何建议都很好。好吧,我误解了你的问题。因此,您已经正确地实现了cookie/HTTP会话,并且出现了以下情况:
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);
你是否正试图像Gmail一样同时支持多个帐户。为了在另一个窗口中检测日志,我认为应该基于会话。如果第二个窗口可以异步检测到已创建会话,则该页面可以在登录状态下重新加载。如果用户能够在同一浏览器但不同的窗口中使用多个帐户登录,现在我们希望使其类似于gmail应用程序。在显示登录页面之前,我们正在创建会话。您是否无法检测跨页面的会话windows@nitigyan,我们正在为我们的实现为两个窗口生成两个不同的会话ID。如果您的会话存储在Cookie中,则不应为同一浏览器的两个窗口获取两个会话ID,除非其中一个窗口处于“匿名模式”(或类似模式)。如果出现这种行为,服务器端会话持久性将被破坏。