当一个人登录到多米诺骨牌服务器时,会创建domauthsessid cookie。在处理xpages时,我也看到了sessionID的cookie。 sessionID是否特定于xpages?这个sessionID是如何被xpages使用的?
答案 0 :(得分:2)
取自http://www-01.ibm.com/support/docview.wss?uid=swg27021314:
Q值。有时,当提交XPage时,它会将SessionID添加到URL和 一些JavaScript停止工作。什么是SessionID?
一个。这是由于HTTP的工作方式。 HTTP是无状态的所以 浏览器必须将ID传递给服务器才能保持会话打开 在服务器上。传递此ID有两种方法。
1 - 将ID作为URL的一部分传递
2 - 将ID作为cookie的一部分从浏览器传递
第二种方式是首选方式。但对于XPages的第一页 引擎不知道连接到该页面的浏览器是否是 是否支持cookie,因此首先通过传递ID和a来尝试 曲奇饼。并在第二个请求它寻找cookie,如果是 cookie就是从URL中删除ID。所以,如果你看一下 应用程序服务器都是这样的。现在有一个 XPages中的属性表示'假设客户端有cookie',和 在这些情况下,根本不使用会话ID。这会破裂 一些不支持启用cookie的浏览器。
sessionID URL参数不与Lotus Domino 8.5.3一起使用 - 仅适用于8.5.2及更早版本。
答案 1 :(得分:0)
XPages使用sessionID cookie,以便服务器知道它处理哪个会话,所以当你运行一些代码如sessionScope.get(param)时,它知道要查看哪个用户的sessionScope。
答案 2 :(得分:0)
此外,使用sessionId表示的会话不应与基于会话的身份验证混淆。
domauthsessid cookie用于单服务器身份验证。如果您使用的是多服务器身份验证,则LtpaToken将用于此目的。此cookie会持久保存您的身份验证会话。
当您登录,注销甚至使用其他用户登录时,将保留XPages会话。只有在特定的空闲时间后才会删除XPage会话,而在您注销时会删除身份验证会话。
答案 3 :(得分:0)
cookie管理服务器的浏览器会话。如果执行?logout,则不会删除sessionScope变量。您可以使用SSJS清除sessionScope映射和注销,但这只会清除当前NSF的映射。如果删除sessionID cookie,则会删除XPages会话,并删除整个服务器的所有sessionScope变量。我在xSnippets OpenNTF网站上添加了一个片段,用于注销并删除sessionID cookie。
答案 4 :(得分:0)
按以下方式创建Xpage:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view
xmlns:xp="http://www.ibm.com/xsp/core"
rendered="false"
>
<xp:this.beforeRenderResponse><![CDATA[#{javascript:
var externalContext = facesContext.getExternalContext();
var request = externalContext.getRequest();
var response = externalContext.getResponse();
var currentContext = com.ibm.domino.xsp.module.nsf.NotesContext.getCurrent();
var session = request.getSession(false);
var sessionId = session.getId();
// flush the cookies and invalidate the HTTP session...
for(var cookie in request.getCookies()){
cookie.setValue("");
cookie.setPath("/");
cookie.setMaxAge(0);
response.addCookie(cookie);
}
session.invalidate();
// now nuke the XSP session from RAM, then jump to logout...
currentContext.getModule().removeSession(sessionId);
externalContext.redirect("?logout");
}]]></xp:this.beforeRenderResponse>
</xp:view>
然后创建一个链接或页面链接以指向上面的Xpage ...
这会将您注销并删除所有Cookie。
免责声明:网上找到的代码(对该人的称赞),不适用于客户端证书认证服务器......
为什么在讨论中这么晚才粘贴这个答案?因为我已经找到了答案而且以上都没有这样做以便将来参考...
答案 5 :(得分:0)
Mikael Andersson Wigander向我们展示了一个很好的解决方案,该方法可以从Domino服务器注销。但是,URL中的?logout参数并不总是有效。
我们发现Mikael的登出页面仅在第一次尝试中登出了用户。然后浏览器将缓存此注销页面,并阻止用户注销下一次尝试。
Mikael解决方案的以下更改将解决此问题:
var appUrl = facesContext.getExternalContext().getRequest().getContextPath();
var url = appUrl +"?Logout&t=" + new Date().getTime() + "&redirectto=" + appUrl ;
facesContext.getExternalContext().redirect(url);
使用还包含时间(以毫秒为单位)的参数调用Xpage:
<xe:this.href><![CDATA[#{javascript:"Logout.xsp?" + new Date().getTime();}]]></xe:this.href>
现在,用户将可以注销每次尝试。