2012-07-20 56 views
3

我扫描了RFC 6265,但未找到以下答案。具有负载平衡的会话cookie(非粘性会话)

我想在单个webapp的多台服务器前放一个天真的round-robbin负载平衡器。负载均衡器不是提供粘性会话。所以客户通常会在连续的请求中从一台应用服务器跳到另一台。

在第一个连接上,客户端没有SID并随机路由到服务器A.
服务器A以会话cookie(即一个随机数)响应。

在下一个连接上,客户端在HTTP标头中包含来自服务器A的SID。 这次客户端被随机地路由到服务器B. 服务器B看到哪个(希望!)不匹配它发布的任何SID。 会发生什么?服务器B是否忽略了“糟糕的”SID,或抱怨或忽略了请求,或者是什么?

这个想法是,我根本不想使用会话cookie。我想避免所有粘性的复杂性。但是我也知道我的服务器可能会生成 - 更重要的是会寻找会话cookie。

如何确保服务器只是忽略(或更好的没有设置)会话cookie?

+0

好的,没有答案。也许我的问题是愚蠢的。如果是这样,请让我重新回到路上。谢谢! – Carlos 2012-07-24 08:30:59

回答

3

我认为对此的答案会有很大的不同,这取决于服务器上运行的应用程序。尽管任何值得使用的负载平衡器都有粘性会话,但只要池中的所有服务器都可以通过集中式数据库访问相同的会话状态,就可以在没有它们的情况下进行操作。

由于您在谈论会话ID,我猜测应用程序确实依赖会话状态才能正常工作。在这种情况下,如果请求带有“坏”会话ID,它很可能会被丢弃并且用户提示登录 - 同样,确切的行为取决于应用程序。如果您完全禁用会话cookie,问题可能会变得更糟,因为即使缺少ID也可能导致登录提示。

如果您真的想避免负载平衡器的复杂性,您需要引入一些机制,通过这种机制,所有服务器都可以处理来自所有会话的请求。通常采用集中式数据库或其他共享存储的形式。这允许会话状态保持不变,而不管处理该特定请求的服务器。

维护会话状态是负载平衡的关键点之一(双关意图),但只是忽略或避免会话cookie不是解决方案。

相关问题