如何阻止浏览器在标签之间共享会话?

时间:2015-06-05 09:01:13

标签: javascript jsp security browser spring-security

如何在多个浏览器标签之间共享会话?

我在JSP / Servlet应用程序中使用Spring Security,我想知道“我们怎样才能实现Spring Security的行为,用户在更改浏览器选项卡时必须再次登录?”

声明 问题类似于this Questionthis question,但由于这两个问题都太旧了(即4,7岁),我相信今天必须有某种方法来实现这一目标,不是吗?

2 个答案:

答案 0 :(得分:8)

成功登录后在sessionStorage.setItem('userId',userId)中放入一些值,当用户打开新标签并尝试登录时,检查sessionStorage.getItem('userId')是否可用如果为null则表示它是新标签/重定向到登录页面。

会话存储是特定于选项卡的,不在不同选项卡之间共享数据。会话存储在现代浏览器中运行。

查看此link了解详情

尝试以下代码

成功登录后,请添加以下代码

<script>

  if(typeof(Storage) !== "undefined") {
      sessionStorage.setItem("uniqueIdSessionStorage", "xyz");
  }
</script>


sessionStorage.getItem('uniqueIdSessionStorage') // this will be a tab specific you will not get xyz for other tabs.

1)检查sessionStorage.getItem('uniqueIdSessionStorage')是否为空,如果null表示新选项卡和新用户。

2)在服务器端始终存储会话属性,如下面的代码

 session.setAttribute("userId"+UniqueValuePerUser,userId);

3)这样,您可以使用单个会话对象进行多次登录,因为每个用户密钥都是唯一的。

4)在请求参数中以某种方式传递sessionStorage值服务器端。一种方法是发送url或隐藏在输入中的某个地方。

5)现在,如果你从tab获得12345值。然后使用以下代码

从会话中获取详细信息
String uniqueId= request.getParameter("uniqueId"); // value will be 12345
session.getAttribute("userId"+uniqueId);

如果你从tab获得45678值,那么

String uniqueId= request.getParameter("uniqueId"); // value will be 45678
session.getAttribute("userId"+uniqueId) // and other details from session using unique id;

6)这种方式在单个会话中使用唯一键可以实现多次登录,但是如果一次注销并且您使会话无效,则其他用户也将被注销,因为会话对象是具有唯一键的对象。

7)取代无效会话,从会话中删除该特定密钥。

session.removeAttribute("userId"+uniqueId);

答案 1 :(得分:0)

登录后将第一页下面的​​脚本放在

(*ptr).age

在所有其他页面上查看以下内容:

<script>
    window.name = 'appname';
</script>

如果用户尝试打开新标签页,则脚本会将用户带到登录页面。

相关问题