Ami*_*mit 2 javascript browser security jsp spring-security
如何不共享多个浏览器标签之间的会话?
我在JSP/Servlet应用程序中使用Spring Security,我想知道"我们怎样才能实现Spring Security的行为,用户在更改浏览器选项卡时必须再次登录?" .
免责声明 问题类似于 这个问题和这个问题,但由于两个问题都太旧了(即4,7岁),我相信今天必须有某种方法来实现,不是吗?
在成功登录时在sessionStorage.setItem('userId',userId)中放置一些值,当用户打开新选项卡并尝试登录时检查sessionStorage.getItem('userId')是否可用如果为null则表示它是新选项卡/重定向到登录页面.
会话存储是特定于选项卡的,不在不同选项卡之间共享数据.会话存储在现代浏览器中运行.
查看此链接了解详情
试试下面的代码
成功登录后,添加以下代码
<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.
Run Code Online (Sandbox Code Playgroud)
1)检查sessionStorage.getItem('uniqueIdSessionStorage')是否为空,如果null表示新选项卡和新用户.
2)在服务器端始终存储会话属性,如下面的代码
session.setAttribute("userId"+UniqueValuePerUser,userId);
Run Code Online (Sandbox Code Playgroud)
3)通过这种方式,您可以使用单个会话对象进行多次登录,因为每个用户密钥都是唯一的.
4)在请求参数中以某种方式传递sessionStorage值服务器端.一种方法是发送url或隐藏在输入中的某个地方.
5)现在,如果你从tab获得12345值.然后使用以下代码从会话中获取详细信息
String uniqueId= request.getParameter("uniqueId"); // value will be 12345
session.getAttribute("userId"+uniqueId);
Run Code Online (Sandbox Code Playgroud)
如果你从tab获得45678值那么
String uniqueId= request.getParameter("uniqueId"); // value will be 45678
session.getAttribute("userId"+uniqueId) // and other details from session using unique id;
Run Code Online (Sandbox Code Playgroud)
6)这种方式在单个会话中使用唯一键可以实现多次登录,但是如果一次注销并且您使会话无效,则其他用户也将被注销,因为会话对象是具有唯一键的对象.
7)而不是无效会话从会话中删除该特定密钥.
session.removeAttribute("userId"+uniqueId);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9021 次 |
| 最近记录: |