3

当用户单击注销链接时,很容易清除当前数据库的 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 客户端也大量使用它。

4

2 回答 2

4

在浏览器端有一个名为“sessionID”的会话 cookie。

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

于 2012-02-24T14:21:29.647 回答
2

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

于 2012-02-24T13:20:06.057 回答