使用Azure、Https和远程HTTP调用的组合丢弃会话

本文关键字:调用 组合 会话 HTTP Azure Https 使用 | 更新日期: 2023-09-27 18:14:13

我们有一个ASP。. NET MVC web角色在Azure上运行。整个站点需要使用[RequireHttps]属性使用https。作为网站的一部分,我们与信用卡支付网关集成。

用户可以登录,一切都很好,无论他们在网站上停留多久,或者他们去了哪个页面,直到他们到达支付步骤。付款涉及以下内容:

  1. 用户点击"购买",他们的购物车信息被发送到控制器动作一。
  2. 控制器动作一。
    1. 从服务器发送一个http请求到支付处理器的API,以获得唯一的表单操作URL。
    2. 向用户呈现一个收集付款信息的表单。
  3. 然后,使用步骤2中的表单操作URL,该表单直接从浏览器发送到支付处理器。
  4. 支付处理器使用令牌将浏览器重定向到控制器动作2。
  5. 控制器动作二
    1. 我们使用令牌从服务器向完成交易的支付处理器发送最终请求。
    2. 向用户显示一个成功页面。

在支付过程中的某个地方,用户的会话被丢弃。我们没有明确地让任何人退出,也没有做任何其他看起来会导致这种情况的事情。

其他有用信息:

  • 我们只有一个实例在运行,所以我们使用InProc会话而不是AppFabric。
  • 本地测试服务器正常。在可能的地方,所有的设置都是相同的。
  • 在Azure模拟器中一切正常(就我所能测试的而言)。完整的测试需要支付网关访问模拟器,这是不可能的)。
  • 验证cookie在浏览器中仍然是完整的
  • 所有的事情都在会话超时窗口内发生。
  • 如果我关闭https,一切都运行在http,那么一切都很好。

什么可能导致用户会话被丢弃?这一定是Azure、https和远程http请求结合的结果,因为如果我把其中一个从等式中去掉,那么一切都可以正常工作。

使用Azure、Https和远程HTTP调用的组合丢弃会话

如果你重定向,Net将删除会话令牌。有一个布尔值可以禁用会话删除。试一试:

Response.Redirect(vm.ReturnUrl, false);

编辑

实际上,Azure是负载均衡的,你无法猜测哪个worker将获得给定的会话。所以你可以使用:

    <
  1. 饼干/gh>Azure共享会话缓存

来源:Azure Asp。Net重定向破坏会话变量