9

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

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

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

4

3 回答 3

10

如果您在多台服务器上部署应用程序,则应使用“集群”。应用程序服务器能够使用“会话复制”来处理这种情况。使用会话复制,每个服务器都将拥有一个活动用户会话的副本。如果第一个请求发送到服务器 A,而第二个请求发送到服务器 B,它将对应用程序代码和最终用户透明。

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

于 2012-10-15T08:19:12.417 回答
2

Spring 提供了会话管理:

Spring Session 使得支持集群会话变得微不足道,而无需绑定到应用程序容器特定的解决方案。它还提供与以下内容的透明集成:

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

WebSocket - 提供在接收 WebSocket 消息时保持 HttpSession 活动的能力

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

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

于 2018-07-16T05:19:21.123 回答
-1

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

于 2014-12-01T20:17:15.690 回答