避免用户在多个选项卡或窗口中打开Web应用程序

时间:2017-01-20 17:41:45

标签: javascript java jsp web internet-explorer-8

我有多页应用程序,我需要检查用户是否在其他浏览器选项卡或其他浏览器窗口(IE8)中打开应用程序并避免这种情况(在打开的新窗口/选项卡中注销用户)

我使用JSP,JavaScript和jQuery

如果真的 - 不要使用sessionStorage

EDITED 我还使用iframe和IE8模态对话框。

4 个答案:

答案 0 :(得分:0)

您需要使用SignalR等技术来保持连接畅通。然后,您需要ping连接以查看该用户是否已连接并关闭其现有连接。如果该实现太令人生畏,您可以向调用登录表(或这些事件的任何存储设备)的应用程序/页面添加一个计时器循环,如果有新的登录,则调用它自己的注销过程。

答案 1 :(得分:0)

一种方法是在应用程序范围内维护存储username vs session-id的映射(在内存中或基于用户计数的db中)。每次登录时,如果session已存在username,则您在此地图中查找。如果存在,则使现有会话无效,否则将新session-id存储在地图中。 [未经测试]

答案 2 :(得分:0)

您可以将用户会话ID或随机生成的id传递给global / window变量,即;

window.state = 'SomeLoginIdString';

将状态保存在客户端页面可以轻松访问的其他变量中,最好是客户端上的数据存储区。

var loginAccessCurrentState = 'SomeLoginIdString';

当使用open / switch页面比较两者时,如果为false,则可以重定向到404页面。

loginAccessCurrentState  === window.state

这个想法是你只在登录会话期间传递状态,如果用户打开一个新选项卡,默认情况下状态是未定义的。

答案 3 :(得分:0)

对于单页面应用程序,以下方法可能是一个简单的解决方案:

  1. 在条目页面上创建随机ID,将其存储在会话和GUI中
  2. 在每次Ajax调用时,将随机ID作为附加HTTP标头
  3. 添加到请求中
  4. 如果ID在给定的标题和会话之间不匹配,则应用程序在另一个标签/窗口中打开,此调用来自" old"标签
  5. 然后,服务器的结果答案必须引导GUI在受影响的选项卡中锁定/关闭自己