使用Azure、Https和远程HTTP调用的组合丢弃会话
本文关键字:调用 组合 会话 HTTP Azure Https 使用 | 更新日期: 2023-09-27 18:14:13
我们有一个ASP。. NET MVC web角色在Azure上运行。整个站点需要使用[RequireHttps]属性使用https。作为网站的一部分,我们与信用卡支付网关集成。
用户可以登录,一切都很好,无论他们在网站上停留多久,或者他们去了哪个页面,直到他们到达支付步骤。付款涉及以下内容:
- 用户点击"购买",他们的购物车信息被发送到控制器动作一。
- 控制器动作一。
- 从服务器发送一个http请求到支付处理器的API,以获得唯一的表单操作URL。
- 向用户呈现一个收集付款信息的表单。
然后,使用步骤2中的表单操作URL,该表单直接从浏览器发送到支付处理器。 - 支付处理器使用令牌将浏览器重定向到控制器动作2。
- 控制器动作二
- 我们使用令牌从服务器向完成交易的支付处理器发送最终请求。
- 向用户显示一个成功页面。
在支付过程中的某个地方,用户的会话被丢弃。我们没有明确地让任何人退出,也没有做任何其他看起来会导致这种情况的事情。
其他有用信息:
- 我们只有一个实例在运行,所以我们使用InProc会话而不是AppFabric。
- 本地测试服务器正常。在可能的地方,所有的设置都是相同的。
- 在Azure模拟器中一切正常(就我所能测试的而言)。完整的测试需要支付网关访问模拟器,这是不可能的)。
- 验证cookie在浏览器中仍然是完整的
- 所有的事情都在会话超时窗口内发生。
- 如果我关闭https,一切都运行在http,那么一切都很好。
什么可能导致用户会话被丢弃?这一定是Azure、https和远程http请求结合的结果,因为如果我把其中一个从等式中去掉,那么一切都可以正常工作。
如果你重定向,Net将删除会话令牌。有一个布尔值可以禁用会话删除。试一试:
Response.Redirect(vm.ReturnUrl, false);
编辑
实际上,Azure是负载均衡的,你无法猜测哪个worker将获得给定的会话。所以你可以使用:
- <
- 饼干/gh>Azure共享会话缓存
来源:Azure Asp。Net重定向破坏会话变量