会话是由IP和用户代理(即浏览器)。所以你不能在同一浏览器中阻止多个标签。你也不想。如果你需要这样做,因为你的设计有一个主要缺陷。如果您只是寻找一种以两位用户身份来测试自己的方式,请以Chrome用户身份登录并以Firefox身份登录。
您与仍然能够得到一个页面注销后的问题显然是,你没有这样的事,以防止unathenticated用户在获得:
String somevar = session.getAttribute("somevar");
if(somevar == null)
{
response.sendRedirect("loginpage");
return;
}
同样在登录页面上,如果用户已经登录:
String somevar = session.getAttribute("somevar");
if(somevar != null)
{
response.sendRedirect("mainpage");
return;
}
这样,已登录的用户无法再次注销登录表单而无需再次注销。
它也可能是一个缓存问题。如果您允许浏览器缓存受保护的页面,那么在用户注销后,如果他们再次访问页面,他们可能会看到该页面,因为它已被缓存。因此,设置无缓存头:
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma","no-cache");
由于浏览器标签共享相同的会话......当用户点击登录页面的第二次你应该重定向到你的“家”页面登录后。 – scunliffe 2014-11-21 12:28:17