出于安全目的,例如银行,我必须限制用户打开任何浏览器的多个标签页。 我希望用户只在浏览器的单个标签中执行他们的任务。
如果他们尝试打开多个标签,则必须强行注销其用户ID。
我不知道该怎么做。
请帮帮我或给我一些逻辑来做这件事。
提前致谢。
答案 0 :(得分:0)
首先,我必须同意其他用户 - 如果有人打开多个标签是安全性问题,那么您就会遇到问题。大问题。
但是,如果您仍然真的想这样做:
当用户登录时:
// Must be a string
var dateTimeStamp = "" +new Date().getTime();
// This one can be seen by all windows/tabs
localStorage.setItem("timeKey", dateTimeStamp);
// This one can only be seen by the current window/tab
sessionStorage.setItem("timeKey", dateTimeStamp);
现在,当页面加载时,只需检查这两个值是否匹配:
var localKey = localStorage.getItem("timeKey");
var sessionKey = sessionStorage.getItem("timeKey");
// If there is a key:
if (localKey) {
if (localKey !== sessionKey) {
// Handle multiple login here? Redirect to login page?
// Complain about tab?
}
}
然后,当用户注销时,请确保删除这两个键。
localStorage.removeItem("timeKey");
sessionStorage.removeItem("timeKey");
警告:强>
这种编码有点脆弱,毫无疑问我错过了一个优势。
额外信用
如果有人在新标签页上登录,则可以监控localStorage
的更改并强制所有其他页面退出。