xpage - sessionID和DomAuthsessId

时间:2012-05-15 18:06:57

标签: xpages

当一个人登录到多米诺骨牌服务器时,会创建domauthsessid cookie。在处理xpages时,我也看到了sessionID的cookie。 sessionID是否特定于xpages?这个sessionID是如何被xpages使用的?

6 个答案:

答案 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>

现在,用户将可以注销每次尝试。