粘性会话持续时间
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());
}
是否可以在 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());
}