【问题标题】:Session dropped using combination of Azure, Https, and Remote HTTP calls使用 Azure、Https 和远程 HTTP 调用组合丢弃的会话
【发布时间】:2013-05-11 20:13:58
【问题描述】:

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

用户可以登录,无论他们在网站上停留多长时间或访问哪个页面,一切都很好,直到他们进入付款步骤。付款涉及以下内容:

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

在付款过程中的某个地方,用户的会话被中断。我们没有明确将任何人登出或做任何其他看起来会导致这种情况的事情。

其他有用信息:

  • 我们只运行了一个实例,因此我们使用的是 InProc 会话而不是 AppFabric。
  • 本地测试服务器正常。一切都尽可能以相同的方式设置。
  • Azure 模拟器中的一切都很好(据我可以测试它。完整的测试需要支付网关访问模拟器,这是不可能的)。
  • 身份验证 cookie 在浏览器中仍然完好无损。
  • 一切都在会话超时窗口内发生。
  • 如果我关闭 https 并且一切都通过 http 运行,那么一切都很好。

什么可能导致用户的会话被丢弃?这一定是结合了 Azure、https 和远程 http 请求的结果,因为如果我将其中之一排除在外,那么一切正常。

【问题讨论】:

  • 你在使用 iframe 吗?此外,使用 Fiddler 查看从支付处理器重定向后会话 cookie 是否被重置。
  • 另外,当支付处理器重定向回您的网站时,是 https 吗?
  • 没有 iframe。重定向是 https。
  • 检查会话cookie,看看它是否在某个时候被重置。
  • 第 4 步重定向后,会话 cookie 被重置。

标签: c# asp.net-mvc session azure https


【解决方案1】:

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

Response.Redirect(vm.ReturnUrl, false);

编辑

实际上,Azure 会进行负载平衡,您无法猜测哪个工作人员将获得给定的会话。所以你可以使用:

  1. Cookie
  2. Azure 共享会话缓存

来源:Azure Asp.Net Redirect destroys Session variables

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2011-12-11
    • 2019-01-08
    • 2022-08-11
    相关资源
    最近更新 更多