当用户单击注销链接时,很容易清除当前数据库的 sessionScope 映射:
var iterator=sessionScope.keySet().iterator();
while (iterator.hasNext()) {
sessionScope.remove(iterator.next());
}
但这只会清除当前 NSF 的 sessionScope 变量,而不是服务器上的所有 NSF。因此,如果他们随后以其他用户身份登录并导航到他们之前在该浏览器会话期间访问过的其他 NSF,浏览器会话仍会为之前登录的用户选择 sessionScoped 变量。
如果应用程序跨越多个 NSF,如何从服务器上的所有 NSF 中清除浏览器的会话?
更新
经过讨论,我从 facesContext.getExternalContext().getRequest().getSession(false) 中获取了会话,然后对其调用了 invalidate() 方法。那没有用,它仍然具有相同的会话 ID,并且保留了作用域变量。我认为德克兰对饼干的想法是原因。我相信 Notes 客户端也大量使用它。