在Multi-NSF应用程序中,如何清除会话?

时间:2012-02-24 12:34:52

标签: xpages

当用户点击注销链接时,很容易清除当前数据库的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,并保留范围变量。我认为Declan关于cookie的想法是原因。我相信Notes客户端也非常使用它。

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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