获取Domino服务器会话超时-XPages

获取Domino服务器会话超时-XPages,xpages,lotus-domino,xpages-ssjs,Xpages,Lotus Domino,Xpages Ssjs,如何在XPages SSJS中获取Domino服务器的会话超时。我想在会话到期前提示用户保存他/她的数据。谢谢只有当用户向服务器发出请求时,服务器才会与用户通信 因此,如果服务器没有请求信息,则无法向用户发送信息 例如: 用户从服务器请求页面 服务器将该页面发送回用户,并创建一个会话 对于该用户。会话设置为5分钟后过期 这5分钟已经过去了,同时用户还没有提出请求 任何进一步的页面。因此,用户会话结束,但因为用户 没有发出任何请求,服务器无法对此进行通信 给用户 这正是HTTP通信设计的工作方式。

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

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

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

例如:

  • 用户从服务器请求页面

  • 服务器将该页面发送回用户,并创建一个会话 对于该用户。会话设置为5分钟后过期

  • 这5分钟已经过去了,同时用户还没有提出请求 任何进一步的页面。因此,用户会话结束,但因为用户 没有发出任何请求,服务器无法对此进行通信 给用户

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

  • 用户从服务器请求页面

  • 服务器将该页面发送回用户,并创建一个会话 对于该用户。会话设置为5分钟后过期。显示 server sends back有一个javascript
    setTimeout
    函数,该函数设置为在服务器会话到期之前触发

  • 这5分钟结束了,用户再次没有请求 任何进一步的页面。因此,用户会话结束,服务器无法进行通信 给用户但是,页面上的javascript知道服务器上的会话即将过期,并发出警报,通知用户保存他们的工作


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

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

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

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


    这是否有意义是有争议的。。。或者也可以实现自动保存。

    您无法确定用户是否会对该提示做出反应。相反的方法呢?像谷歌邮件中的自动保存?我们什么时候自动保存?每次用户完成某些操作时?这不是服务器的开销吗?据我所知,上述代码给出了应用程序属性中定义的会话超时,我想要的是domino服务器文档中定义的超时。我有一个带有SSO的网站,即使用户处于活动状态,domino服务器上也会有一些设置,在该用户的会话过期之后。谢谢Jimmery,这是有意义的。但据我所知,我们永远不能相信setTimeout是准确的,因为它在每台机器上的行为不同,这是由于CPU速度、机器配置等诸多因素造成的。但是,您将处于这样一个位置:setTimeout不准确,但它可以工作,而您试图做的事情在HTTP上根本无法工作。请注意,有几种方法可以提高setTimeout的准确性,但即使如此,这也只是假装通过HTTP进行双向连接。对于您试图实现的目标(服务器向客户端发送消息),您应该研究推送技术-