多个关联Cookie

时间:2016-11-11 10:39:56

标签: azure azure-web-sites arr

我有多个具有以下特征的azure网站

  • 每个网站都在其网站上运行。自己的网络服务器(应用程序服务计划)
  • 他们正在运行多个实例
  • 他们在共享域下拥有自己的子域
  • 他们启用了ARR(故意)

其中一个网站是主要网站,并使用域名,没有子域名作为其网站。主机名。这是我问题的根本原因。

分别访问sub.domain.comdomain.com(两个不同的网站,在不同的应用服务计划中)将为每个网站设置一个关联Cookie。

Cookie规范规定,Cookie应包含在对Cookie的任何子域的请求中。域名属性。这意味着,如果我现在访问sub.domain.com,浏览器将包含两个关联Cookie,因为它在技术上是domain.com的子域。

Azure的负载均衡器显然只查看第一个包含的亲和力cookie。如果这恰好是属于domain.com的那个,它将包含一个无效值,并且loadbalancer将请求循环到一个随机的自由实例。响应将包含一个带有有效关联cookie的set-cookie标头,但无论如何,这将作为后续请求中的第二个cookie包含在内,问题仍然存在。这有效地完全禁用了所有子域的ARR,只要domain.com亲和力Cookie存在,以及我们网站所依赖的粘性会话。

目前,我已在domain.com网站上停用了ARR,因为它只在一个实例中运行。但这是可能的,因为我们正在进行预生产。在不久的将来,我需要扩展到至少两个实例,因为天蓝色SLA需要生效。

问题可以通过将domain.com上的网站迁移到子域名(f.ex。:www.domain.com)来解决,但我真的不愿意这样做。

理想情况下,我希望负载均衡器检查所有包含的关联cookie,而不仅仅是第一个。但直到修复,我很想知道任何变通方法。据我所知,我能控制的ARR的唯一方面是是否应该启用。

1 个答案:

答案 0 :(得分:0)

以下是Azure支持团队对此问题的回应:

  

我想告诉您问题的状态。产品团队已经分析了问题,他们将对此进行调查。他们一致同意ARR的最佳解决方案是通过所有cookie进行迭代。

     

不幸的是,目前我们还没有任何ETA,所以现在最好的解决方法正如你所说的那样,将www添加到你的裸域。

老实说,我认为这是最好的结果。 Azure已经认识到了这个问题,并致力于纠正它。直到那时,如果你需要粘性会话,可能的解决方法是

  • 不在不共享应用服务计划的网站上同时使用裸域和子域
  • 跨网站实例使用共享会话,从而完全消除了对ARR的需求。在ASP.NET中,使用SQL,Redis,Azure存储或其他东西作为会话存储,可以轻松设置不同的会话状态提供程序。