如何阻止浏览器在选项卡之间共享会话?

2024-05-04

How to NOT在多个浏览器选项卡之间共享会话?

我在 JSP/Servlet 应用程序中使用 Spring Security,我想知道“我们如何使用 Spring Security 实现用户在更改浏览器选项卡时被迫再次登录的行为?”.

免责声明问题类似于这个问题 https://stackoverflow.com/questions/368653/how-to-differ-sessions-in-browser-tabs/11783754#11783754 and 这个问题 https://stackoverflow.com/questions/6243201/session-shared-in-between-tabs,但由于这两个问题都太老了(即 4.7 年前),我确信今天一定有某种方法可以实现这一目标,不是吗?


成功登录后,在 sessionStorage.setItem('userId',userId) 中输入一些值,当用户打开新选项卡并尝试登录时,检查 sessionStorage.getItem('userId') 是否可用,如果为 null,则意味着它是一个新选项卡/重定向到登录页面。

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

检查这个link http://www.w3schools.com/html/html5_webstorage.asp欲了解详情

尝试下面的代码

成功登录后添加以下代码

<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')是否不为空,如果为空则表示新选项卡和新用户。

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

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

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

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

5) 现在,如果您从选项卡中获得 12345 值。然后使用以下代码从会话中获取详细信息

String uniqueId= request.getParameter("uniqueId"); // value will be 12345
session.getAttribute("userId"+uniqueId);

如果您从选项卡中获得 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何阻止浏览器在选项卡之间共享会话? 的相关文章

随机推荐