当用户点击登录链接时,很容易清除当前数据库的SessionsCope映射:

var iterator=sessionScope.keySet().iterator();
while (iterator.hasNext()) {
  sessionScope.remove(iterator.next());
}
.

但这只清除当前NSF的SessionsCope变量,而不是服务器上的所有NSF。因此,如果它们以其他用户身份登录并导航到先前在该浏览器会话期间访问的其他NSF,则浏览器会话仍然可以为先前登录用户的SessionsCoped变量拾取。

如果应用程序跨越多个NSF,您如何清除服务器上所有NSF的浏览器会话?

更新

讨论后,我从facescontext.getexternalContext()持有会话。getRequest()。getsessess(false)然后调用无效()方法。这不起作用,它仍然具有相同的会话ID,并且保留了范围变量。我认为Dectan对饼干的想法是原因。我相信笔记客户端也非常重视。

有帮助吗?

解决方案

在浏览器侧有一个名为'sessionid'的会话cookie。

如果在注销过程中无效/清除该cookie,会发生什么?

其他提示

我不知道如何清除另一个数据库的sessionscope,但您可能会考虑一个不同的方法:存储初始化SessionsCope中的SessionsCope的用户的名称,并将其与尝试初始化的用户名进行比较它。如果名称不同,请清除SESSIONSCOPE并再次初始化。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top