3

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

4

3 回答 3

1

服务器仅在用户向服务器发出请求时才与用户通信。

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

例如:

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

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

  3. 这 5 分钟已经结束,同时用户还没有请求任何其他页面。因此用户会话结束,但由于用户没有发出任何请求,服务器无法将其传达给用户。

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

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

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

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

于 2013-09-10T11:31:36.673 回答
0

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

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

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

于 2013-09-10T11:39:39.377 回答
0

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

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

于 2013-09-11T11:08:48.277 回答