-1

我在 JAVA 中有我的后端,并且网站托管在 AWS 服务器上(2 个或更多)。在我的网站上处理用户会话的最佳方法是什么?

研究HTTPSession过,但它的缺点是一个服务器的会话将不会具有与另一台服务器的会话相同的属性。那么处理用户会话的最佳解决方案是什么?

PS:我正在使用Struts2。

4

1 回答 1

1

当您有多个可以处理请求的应用服务器时,有两种主要的方法来处理会话状态:

  1. 让您的负载均衡器实施“粘性”会话。在这里,负载均衡器将来自同一个客户端的所有请求发送到同一个应用服务器。会话在本地维护,一切正常,就好像只有一个应用服务器一样。当应用服务器出现故障时,所有与该服务器相关的会话都将丢失。

  2. 拥有可供所有应用服务器使用的公共会话存储。当应用服务器接收到请求时,它会从会话存储中获取会话状态,并在完成修改该请求的会话状态后,将其写回存储。会话存储可能是共享数据库,也可能是所有应用服务器远程访问的内存缓存。如果应用服务器出现故障,则不会丢失任何会话。但是,通过网络读取/写入会话的每个请求都会产生额外的开销。

要决定使用哪种方法,您需要考虑在丢失服务器时不终止会话的重要性、会话状态大小等。在我看来,公共会话存储几乎总是可取的,因为它在操作上更容易处理 - 您可以随时在不终止会话的情况下随时攻击服务器。

我不会推测可用于支持实施的产品的可能选择,因为这将纯粹是基于意见和本网站的题外话。可以说有很多不错的选择 - 适合您的特定选择将取决于您的具体要求和专业知识。

于 2015-02-12T20:45:56.600 回答