【问题标题】:Disable multi-tab browsing for single session/user禁用单个会话/用户的多标签浏览
【发布时间】:2018-02-08 08:13:23
【问题描述】:

[免责声明:我不确定这种问题是否在这里被接受,因为它是关于已经部署的软件。请放心,我没有放弃任何机密信息。另外请告诉我我是否违反了 SO 中的任何规则,因此我可以立即将其删除]

我有一个正在运行的学习管理系统 Web 应用程序,我最近收到了一个关于按钮未显示的错误报告。经过调查,我已经证明用户没有按预期使用网络应用程序。在参加考试时,他打开了多个选项卡以利用通知他答案是否正确的功能。然后,他将使用此信息消除错误答案,并在另一个选项卡/窗口中提交所有正确答案。

我正在使用 Rails 4.2。有没有办法防止多标签浏览?我在想,如果用户登录并尝试打开 web 应用程序的新选项卡,他应该会看到“请使用一个选项卡”之类的内容,并且所有功能/超链接/按钮都被禁用。

这是我如何证明他使用多个标签的屏幕截图。请注意,有多个相同尝试的日志 # 因为当前实现允许保存学习会话并稍后恢复(这是被利用的部分)。打开多个选项卡会搜索最近的尝试会话并从那里继续。这也是大多数会话没有持续时间值的原因——用户只完成一个选项卡的学习会话(通过单击结束学习会话的按钮)。系统无法计算持续时间,因为其他会话没有结束时间戳。

-

这是单标签用户的样子:

这更像是一个应用程序滥用问题,而不是一个错误。

【问题讨论】:

  • 你可以通过 websockets 做到这一点,如果用户打开了多个 websocket 连接,请禁用最新的。
  • JS sessionStorage 每个标签都是唯一的。您可以生成一个值并将其与每个页面请求一起传递给应用程序,以便它可以在不同时将用户注销。以下帖子可能对您有所帮助terrcin.io/2015/05/10/browser-tab-trackingstackoverflow.com/questions/11896160/…

标签: ruby-on-rails session


【解决方案1】:

您不仅应该为多标签添加保护,还应该为多浏览器添加保护,因此不能纯粹是前端检查。

其中一种解决方案可能是使用 ActionCable 检查用户是否已经有活动连接,然后采取相应措施。

另一个,例如,在 JS 中生成一个 GUID,并在每个答案中传递它。如果它与之前的答案不同,则意味着用户打开了一个新窗口。

当然,解决方案将取决于您当前的架构,在不知道您当前如何组织客户端-服务器通信的情况下,很难给出准确和最佳的解决方案。

【讨论】:

    【解决方案2】:

    我找到了答案here。我只是将这个 js 放在应用程序视图中,以防止网站的任何额外实例。 感谢所有参与的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-20
      • 2019-02-05
      • 2010-12-20
      • 2021-05-27
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多