应用程序控制的会话粘性:在所有cookie上启用粘性?

时间:2015-12-11 19:50:51

标签: amazon-web-services cookies configuration server load-balancing

我的生产服务器在AWS上的负载均衡器后面运行(它们根据AMI进行扩展)。有些网站有cookies - 例如,有多个地点的餐馆,每个地点都设有一个cookie。

我注意到没有在多台服务器上保存Cookie,所以我通过进入Load Balancers -> Port Configuration,点击Enable Application Generated Cookie Stickiness并插入Cookie名称来解决这个问题。

据我所知,这只允许一个cookie名称,而且我有很多 - 例如Google Analytics。 (也许它们可以用逗号分隔,我还没有检查过。)

我的端口配置现在如下所示:

80 (HTTP) forwarding to 80 (HTTP)
Stickiness: AppCookieStickinessPolicy, cookieName='MY_COOKIE'

我想知道是否有任何方法可以识别任何应用生成的Cookie,而不必单独命名。

任何输入都非常感谢。谢谢!

1 个答案:

答案 0 :(得分:4)

我认为你误解了会话粘性的用途和目的。

如果您没有共享会话存储 - 即memcached,redis或池中所有实例可用的内容,那么您可能正在使用涉及本地存储的会话机制 - 节省它们在本地文件系统上是php的常用机制,而IIS通常会有本地会话存储。

如果您正在使用本地会话存储,那么您需要确保所有后续请求都返回到存储会话的节点 - 因为如果它没有,那么您的应用程序的任何信息保存在会话中已不再可用。

为此,您有两种选择:允许ELB设置和管理会话关联cookie,或者让它根据您设置的会话cookie执行。请注意,在这两种情况下,ELB都将创建一个名为AWSELB的新cookie,并允许它将请求映射到原始创建它的实例 - 但是如果将它绑定到ELB仅生成时的会话cookie集AWSELB cookie在看到新的会话cookie时。

听起来应用程序问题可能是因为您从会话中提取位置,而不是从Cookie中提取位置,但这只是猜测。