【发布时间】:2016-10-04 06:10:40
【问题描述】:
在我的应用程序中,它不应该允许用户在同一浏览器的多个选项卡中打开应用程序。出于某种安全目的,我需要实现这一点。我该如何实现呢?
【问题讨论】:
标签: javascript
在我的应用程序中,它不应该允许用户在同一浏览器的多个选项卡中打开应用程序。出于某种安全目的,我需要实现这一点。我该如何实现呢?
【问题讨论】:
标签: javascript
每次用户打开您的应用程序时,都会在服务器端生成一个会话 ID。此会话 ID 应特定于浏览器、IP、MAC 以及您在初始请求中收到的任何数据。对于每个后续请求,验证会话 ID。
应用程序中的任何链接都应发送 POST 请求,最好是提交表单,而不是 GET 请求,因此它不会在另一个选项卡中打开。
如果用户故意在另一个选项卡中打开您的应用程序,因为您知道您已经为请求的数据生成了一个会话 ID,因此使之前生成的会话 ID 无效,注销该用户并销毁该会话。
【讨论】:
更简单的方法是订阅 localStorage 通知,然后更新一个节点。由于事件不会发送到更新选项卡,它只会影响以前打开的选项卡。
jquery 中的示例:
$(window).on("storage", function(ev) {
if (ev.originalEvent.key == "tabsync") {
window.close(); // will probably not work if the user opened the tab
window.location = "/onetabonlyplease";
}
});
localStorage.setItem("tabsync", Date.now());
【讨论】: