如何检测浏览器窗口是否已从另一个浏览器窗口打开
How to detect whether the browser window has opened from another browser window?
我们正在开发Java-Gwt Web应用程序,我们有一个登录页面来访问该应用程序。最近我们面对下面描述的一种情况。
1)用户在一个浏览器窗口(例如Chrome)中打开应用程序,登录页面将显示给用户。2)用户再次在另一个浏览器窗口(例如Chrome)中打开相同的应用程序,并且还会向用户显示登录页面。
在这里,用户输入登录凭据并从第一个浏览器窗口访问应用程序,然后用户再次输入在第二个浏览器窗口中使用不同的登录凭据并访问应用程序。在这里,我们打开了两个不同的应用程序2 个浏览器窗口中的凭据,即使浏览器实例相同。
如果我们像上面一样,我们将按照我们的实现进入不一致状态。
在上述情况下,最好的方法是什么?
我在"Gmail"应用程序中观察到上述解释的情况,如果用户登录第一个窗口,它将重新加载第二个窗口。
如果我们认为"Gmail"是一个很好的例子,如何在GWT或JavaScript中从第一个窗口中检测第二个浏览器窗口?
任何建议都会很棒。
好吧,我误解了你的问题。 因此,您正确实现了 cookie/HTTP 会话,并且会发生以下情况:
- 用户在同一浏览器
- 应用程序的两个浏览器窗口(或选项卡)中加载登录页面。 创建单个 HTTP 会话(未经身份验证)和相应的浏览器 Cookie(在第一次加载时)。 用户
- 在第一个窗口中以用户 A 身份登录,这将更新会话和 Cookie 以反映用户 A 已登录。
- 然后,用户在第二个窗口中以用户 B 身份登录,该窗口将更新会话和 cookie 以反映用户 A 已登录。
- 如果您的应用包含特定于用户的内容,则用户 A 的数据仍将显示在第一个浏览器窗口中,但刷新页面或浏览将显示它确实是用户 B 登录的。
这些行为都不表示存在问题,但您希望能够检测到何时发生(或至少在步骤 1-3 中)。 为此,我建议在身份验证后在会话/cookie中存储有关用户的内容,例如ID(您可能已经在这样做了)。 在 HTTP 会话/cookie 中设置此值时,首先检查其中是否已存在非空值。 如果是这样,则您已成功检测到上述情况。
因此,在身份验证之后,像这样,其中请求是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);
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 如何使用modalDialog来显示可以在所有浏览器中工作的弹出窗口
- 如何使用特定大小的浏览器窗口打开我的页面
- Flash AS3关闭浏览器窗口
- 如何打开/移动主屏幕左侧的浏览器窗口
- 使用 javascript 打开新的浏览器窗口时出错
- 如何在浏览器窗口变大/变小时捕捉元素的宽度
- 更改当前选项卡或浏览器窗口的标题
- 如何在windowsphone 7浏览器中通过javascript打开新窗口或选项卡
- 如何在同一浏览器屏幕中创建多个窗口
- 如何相对于浏览器窗口定位DIV
- 浏览器窗口中的应用内FB页面插件链接
- 在浏览器窗口中创建动态灵活的分割标记
- 窗口浏览器外的计数器停止
- 如何使元素的宽度和高度为页面(文档)的100%,而不仅仅是窗口(浏览器)
- 如何在调整窗口浏览器大小时使用jquery或javascript加载javascript文件
- 弹出窗口浏览器仍然是Windows主页的一部分
- 如何检查用户是否关闭了窗口/浏览器/关闭了计算机
- GWT:添加窗口小部件到新的窗口浏览器
- 弹出窗口-浏览器差异