考虑以下情况:
我有两个发布服务器来处理调度程序后面的请求,该请求正在执行一些负载平衡机制,以循环方式在两个服务器之间分配请求。
使用案例
用户从登录页面输入登录凭据,然后点击“提交”。调度程序将请求定向到“发布服务器1”。成功验证后,会向客户端提供会话ID,相应的会话信息存储在“发布1”中。
用户点击另一个受保护的页面,但调度员将请求重定向到“发布服务器2”。没有会话信息对应的会话信息。
合理的结果会话重置,系统会提示用户重新登录。
如何处理此类要求?
注意:我的用户不在AEM中,正在通过数据库验证用户的真实性。
P.S。:我已经去过几个博客,说AEM不支持Http Session集群,但没有一个能为这个问题提供正确的解决方案。
答案 0 :(得分:1)
一种替代方法是使用网络路由。我们使用负载均衡器,并且可以将其配置为启用粘性会话。它本质上添加了一个cookie,用于后续请求将用户路由到用户第一次点击的同一个发布者。这是一个非AEM解决方案,纯粹是网络和负载均衡器的一个功能,因此它可能是也可能不是您的选择。 AEM调度程序配置还允许stickyConnections
配置听起来像在网络负载均衡器中完成相同的操作。
另见
答案 1 :(得分:1)
您可以执行以下操作
在调度程序和负载均衡器上启用Sticky会话(如果有的话)
#Allowing Sticky sessions
/stickyConnectionsFor "/content/brand/en-us"
启用会话管理
#Configuration to increase session timeout limit
/sessionmanagement
{
/directory "/mnt/var/www/html/content/.sessions"
/header "Cookie:login-token"
/timeout "3600"
}
PS:3600s = 60mins
答案 2 :(得分:0)
两种可能的解决方案 -
1)如果外部IDP提供身份验证服务,则将身份验证信息存储在cookie中。无论发布者的请求是什么,它都将使用cookie中的信息,并将使用IDP服务进行会话检查。
2)如果使用自定义身份验证处理程序,则在调度程序中使用粘性会话,这将确保请求返回到会话处于活动状态的同一发布者。