粘性会话持续时间

Sticky session duration

是否可以在 mod_cluster 中指定粘性会话持续时间?

我的意思是卡住的session在一段时间没有activity的情况下被清除

我们有一个可分发的应用程序,它在网络会话中保留对登录用户的引用。但在登录时,Web 会话复制的速度不如登录请求后的请求快。因此,如果对于这些请求,平衡器选择了一个尚未复制的节点,则用户将不会进入会话并发生错误。

此功能的另一个用途是在服务器上使用缓存信息。如果您不使用粘性会话,您将加载以在不同服务器中多次缓存相同的信息。但是,如果您使用粘性会话,您将在整个会话生命周期内绑定到同一台服务器。

提前致谢

莱安德罗

回答

无法在 mod_cluster 中打开和关闭会话粘性一段时间。要么开要么关。

进一步评论

IIUC,你实际上是在session过期或者session失效之后。您可以随时以编程方式决定使您的会话无效,或者您可以通过设置过期超时让它过期。

您能否详细说明如何使用 "session stickiness timeout"?如果有意义,我们可以创建一个 JIRA 并实现一个新功能...

我找到了满足我们需求的解决方法。

我在平衡器 (BALANCER_SESSION_ID_HEADER_NAME) 配置不同的 stickysession 属性并在客户端管理平衡器粘性会话持续时间。

第一次,我将 counter + JSESSIONID 设置为 BALANCER_SESSION_ID_HEADER_NAME。每次用完STICKY_SESSION_TIMEOUT,我就把++counter + JSESSIONID设置为BALANCER_SESSION_ID_HEADER_NAME

客户代码:

if (USE_STICKY_SESSION_TIMEOUT && this.getjSessionId() != null) {
  if (this.getLastResponseTime() != 0
      && new Date().getTime() - this.getLastResponseTime() > STICKY_SESSION_TIMEOUT) {
    balancerSubsessionCounter++;
  }

  final String cookie = BALANCER_SESSION_ID_HEADER_NAME + "=" + balancerSubsessionCounter + "-"
      + this.getjSessionId();
  this.addCookie(httpPost, cookie);
}

//invoke service

if (USE_STICKY_SESSION_TIMEOUT) {
  this.setLastResponseTime(new Date().getTime());
}