0

当一个人登录到 domino 服务器时,会创建 domauthsessid cookie。在处理 xpages 时,我还看到了 sessionID 的 cookie。sessionID 是特定于 xpages 的吗?xpages如何使用这个sessionID?

4

6 回答 6

2

取自http://www-01.ibm.com/support/docview.wss?uid=swg27021314

Q. 有时当 XPage 被提交时,它会将 SessionID 添加到 URL 中并且一些 JavaScript 停止工作。那个 SessionID 是什么?

A. 这是由于 HTTP 的工作方式。HTTP 是无状态的,因此浏览器必须将 ID 传递给服务器,以便在服务器上保持会话打开。传递此 ID 有两种方法。

1 - 将 ID 作为 URL 的一部分传递

2 - 从浏览器传递 ID 作为 cookie 的一部分

第二种方式是首选方式。但是对于第一个页面,XPages 引擎不知道连接到该页面的浏览器是否支持 cookie,因此它首先通过传递一个 ID 和一个 cookie 进行尝试。在第二个请求中,它会查找 cookie,如果 cookie 存在,它会从 URL 中删除 ID。因此,如果您查看所有应用程序服务器,它们都在这样工作。现在在 XPages 中有一个属性说“假设客户端有 cookie”,在这些情况下根本不使用会话 ID。所以这会破坏一些不支持启用 cookie 的浏览器。

sessionID URL 参数不用于 Lotus Domino 8.5.3 - 仅用于 8.5.2 和更早版本。

于 2012-05-15T18:27:37.517 回答
1

创建一个 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>

然后创建一个链接或者Page Link指向上面的Xpage……</p>

这将使您注销并删除所有 cookie。

免责声明:在网上找到的代码(对那个人表示敬意),这不适用于客户端证书认证的服务器......</p>

为什么在讨论中这么晚才粘贴这个答案?因为我一直在寻找答案,但以上都不起作用,所以供将来参考……</p>

于 2018-03-23T12:44:16.897 回答
0

此外,不应将使用 sessionId 表示的会话与基于会话的身份验证相混淆。

domauthsessid cookie 用于单服务器身份验证。如果您使用多服务器身份验证,LtpaToken 将用于该目的。此 cookie 保持您的身份验证会话。

当您登录、注销甚至使用其他用户登录时,XPages 会话将被保留。XPages 会话只会在特定的空闲时间后被删除,而身份验证会话会在您注销时被删除。

于 2012-05-16T07:41:56.713 回答
0

cookie 管理服务器的浏览器会话。如果您执行 ?logout,则不会删除 sessionScope 变量。您可以使用 SSJS 清除 sessionScope 映射并注销,但这只会清除当前 NSF 的映射。如果您删除 sessionID cookie,XPages 会话将被删除,并且整个服务器的所有 sessionScope 变量都将被删除。我向 xSnippets OpenNTF 站点添加了一个片段,该站点执行注销并删除 sessionID cookie。

于 2012-05-17T22:02:10.730 回答
0

XPages 使用 sessionID cookie,以便服务器知道它处理的是哪个会话,因此当您运行一些像 sessionScope.get(param) 这样的代码时,它知道要查看哪个用户的 sessionScope。

于 2012-05-15T19:01:37.313 回答
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>

现在用户将能够退出每次尝试。

于 2019-12-16T07:40:48.857 回答