【问题标题】:Get Domino server session timeout - XPages获取 Domino 服务器会话超时 - XPages
【发布时间】:2013-09-11 19:08:48
【问题描述】:

如何在 XPages-SSJS 中获取 Domino 服务器的会话超时。我想在会话到期之前提示用户保存他/她的数据。谢谢

【问题讨论】:

  • 您无法确定用户是否会对该提示做出反应。相反的方法——自动保存,比如在谷歌邮件中呢?
  • 我们什么时候自动保存?每次用户完成某项操作时?这不会是服务器的开销吗?

标签: xpages lotus-domino xpages-ssjs


【解决方案1】:

只有当用户向服务器发出请求时,服务器才会与用户进行通信。

因此,如果用户没有请求,服务器将无法向用户发送信息。

例如:

  1. 用户向服务器请求页面。

  2. 服务器将该页面发回给用户,并创建一个会话 对于那个用户。会话设置为在 5 分钟后到期。

  3. 这 5 分钟已经结束,在此期间用户尚未请求 任何其他页面。所以用户会话结束,但是因为用户 没有发出任何请求,服务器无法传达此信息 给用户。

这正是 HTTP 流量设计的工作方式。但是有一些方法可以解决这个问题,通过更改上面的示例,我将向您展示一种最简单的方法:

  1. 用户向服务器请求页面。

  2. 服务器将该页面发回给用户,并创建一个会话 对于那个用户。会话设置为在 5 分钟后到期。该页面 服务器发回有一个 javascript setTimeout 函数,该函数设置为在服务器会话到期之前触发。

  3. 那 5 分钟已经过去了,但用户还没有请求 任何其他页面。所以用户会话结束,服务器无法通信 给用户。 但是,页面上的 javascript 知道服务器上的会话即将到期,并触发警报以告诉用户保存他们的工作。

【讨论】:

  • 谢谢 Jimmery,这是有道理的..但据我所知,我们永远不能相信 setTimeout 是准确的,因为它在每台机器上的行为都不同,因为 CPU 速度、机器配置等因素很多..
  • 是的。但是您处于 setTimeout 不准确但可以正常工作的位置,而您尝试做的事情根本无法通过 HTTP 工作。请注意,有几种方法可以提高 setTimeout 的准确性,但即便如此,这仍然只是伪造 HTTP 上的 2 路连接。对于您要实现的目标(服务器向客户端发送消息),您应该研究 PUSH 技术 - en.wikipedia.org/wiki/Push_technology
【解决方案2】:

在 SSJS 中,您可以使用以下代码获取 SessionTimeout 的设置:

facesContext.getApplication().getApplicationProperty("xsp.session.timeout", "30");

但这是一个静态值(以分钟为单位)。会话在当前会话的最后一次请求后 X 分钟(默认为 30 分钟)到期。

【讨论】:

  • 据我所知,上面的代码给出了应用程序属性中定义的会话超时,我想要的是在 domino 服务器文档中定义的超时。我有一个带有 SSO 的网站,即使用户处于活动状态,多米诺服务器上也会有一些设置,之后该用户的会话就会过期。
【解决方案3】:

好吧,每次服务器和客户端之间的交互都会重置超时。所以可以做的基本上是在客户端倒计时,在每次新请求后重置。这也可以用于客户端在实际会话超时之前的定义时间内触发保存交互。

这是否有意义还有待商榷...或者也可以实现自动保存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多