javascript - 如何阻止浏览器在选项卡之间共享 session ?

标签 javascript jsp security browser spring-security

如何在多个浏览器选项卡之间共享 session ?

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

免责声明 问题类似于 this Questionthis question ,但由于这两个问题都太老了(即 4.7 岁),我相信今天一定有某种方法可以实现这一目标,不是吗?

最佳答案

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

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

查看此 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') 是否不为空,如果为空则表示新标签页和新用户。

2) 在服务器端总是像下面的代码一样存储 session 属性

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

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

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

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

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) 这种在单个 session 中使用唯一 key 的方式可以实现多次登录,但如果一个注销并且您使 session 无效,其他用户也将被注销,因为 session 对象是一个具有唯一 key 的对象。

7) 从 session 中删除该特定 key ,而不是使 session 无效。

session.removeAttribute("userId"+uniqueId);

关于javascript - 如何阻止浏览器在选项卡之间共享 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30662431/

相关文章:

javascript - 如何在 Google 小工具中打开新窗口?

javascript - 垂直对齐(居中) slider 不起作用

javascript - 如何正确访问我的 PHP 文件?直接来自 JS 还是通过 "master"PHP?

javascript - 有没有办法使用哈希/校验和来确保已发布的 npm 包的完整性?

javascript - 在 TypeScript 中向 Object.prototype 添加自定义方法

javascript - jQuery 中的逗号格式数字

java - 使用该行的 id 编辑表的特定行,无需使用 jquery 进行数据库操作

Java 字符编码问题,货币在 JSP 中显示不正确

html - 通过更改 JSP 中的内容类型来下载图像

AndroidX Security EncryptedSharedPreferences v1.1.0/w API 21 问题