管理多个服务器环境中的会话

时间:2012-10-15 08:09:04

标签: java session tomcat

假设我运行了多个Web应用程序服务器,并且我从Server1登录用户,因此他的会话开始。由于http是无状态的,假设下一个请求是否发送到Server3而不是用于登录到应用程序,如果我使用cookie,隐藏的形式,它不会在Server2中工作。

那么如何管理会话?可能是通过生成ID(甚至重用生成的jsessioid)并将其存储在中央数据库中,以便所有服务器都可以访问此会话ID并在处理请求之前对其进行验证。那么在这种情况下,我需要开发一种机制来将所有会话数据作为对象存储到数据库中。

是否有其他可用的内置机制?

3 个答案:

答案 0 :(得分:6)

如果要在多个服务器上部署应用程序,则应使用“群集”。应用程序服务器能够使用“会话复制”来处理此方案。使用会话复制,每个服务器都将拥有活动用户会话的副本。如果第一个请求进入服务器A并且第二个请求进入服务器B,则它对应用程序代码和最终用户是透明的。

对于Tomcat中的群集/会话复制,您可以查看this链接。

答案 1 :(得分:1)

Spring提供了会话管理:

  

Spring Session使支持集群会话变得很简单,而不必依赖于特定于应用程序容器的解决方案。它还提供与以下内容的透明集成:

     

HttpSession-允许以应用程序容器(即Tomcat)中立的方式替换HttpSession,并支持在标头中提供会话ID以与RESTful API一起使用

     

WebSocket-能够在接收WebSocket消息时使HttpSession保持活动状态

     

WebSession-允许以与应用程序容器无关的方式替换Spring WebFlux的WebSession   来源:Spring文档。

请检查此以获取更多信息:https://spring.io/projects/spring-session#overview

答案 2 :(得分:-1)

如果您的基础架构(服务器1,2 ......)连接到Citrix Netscalar等单个网络设备,则可以使用IP或Cookie持久性,以便netscalar将更多请求发送到同一服务器。