【发布时间】:2016-10-16 06:31:13
【问题描述】:
我的网站只需要一个可访问的标签。当他尝试在新标签中打开,甚至尝试在新标签中复制和粘贴 url 时,应该清除用户的会话并从应用程序中注销。
有几个原因,
- 当用户打开连接到同一应用程序的新选项卡时 - 会话 ID 相同。
- 假设此用户从第一个选项卡到达应用程序流中的页面 X。
- 当他打开第二个选项卡时,他可能处于以下情况之一 - 取决于打开第二个选项卡的方式 - 新选项卡、重复选项卡(这会将 URL 复制到新打开的选项卡)或新会话。 以上所有将“混淆”服务器关于应用程序的下一个有效状态是什么,并且可以在他/她不知情的情况下覆盖在不同选项卡中输入的数据 我想要的是防止单个用户在同一个会话中有多个选项卡,即每个用户每个会话只有一个选项卡/窗口。
登录后在dashboard.php中包含以下脚本
<script>
$(document).ready(function()
{
if(typeof(Storage) !== "undefined")
{
if (sessionStorage.pagecount)
{
sessionStorage.removeItem('pagecount');
window.location='logout.php';
}
else
{
sessionStorage.pagecount = 1;
}
}
else
{
sessionStorage.removeItem('pagecount');
window.location='logout.php';
}
});
应用程序其他子页面中的以下代码
<script>
$(document).ready(function()
{
if(typeof(Storage) !== "undefined")
{
if (sessionStorage.pagecount)
{
sessionStorage.pagecount = Number(sessionStorage.pagecount) + 1;
}
else
{
sessionStorage.removeItem('pagecount');
window.location='logout.php';
}
}
else
{
sessionStorage.removeItem('pagecount');
window.location='logout.php';
}
});
</script>
【问题讨论】:
-
但对解决方案不满意。我该如何实施? @AngelosChalaris
-
阅读我链接到的问题。大多数 aswers 建议要么这是一种不好的做法,要么有一种解决方法,但对于您有兴趣实施的那种事情来说,这不是一个非常简单的解决方案。如果您在我所链接的问题的答案之一的特定实施方面需要帮助,请尝试自己实施并查看您可能遇到的问题,然后尝试使用更多详细信息更新您的问题。
-
您想要的是服务器端功能。一些网站能够使用 Websockets 或类似技术来做到这一点,因此服务器可以将注销实时推送到浏览器。任何其他方法都意味着篡改浏览器的正常行为,这可能会给最终用户带来一些安全问题/问题。
-
a) 你为什么还要考虑这个?有人需要这个做什么? b)我很确定这会积极地对每个合法用户 p*ss实现这一目标?
标签: javascript php browser tabs