成功登录后,在 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);