c# - 使用 Azure、Https 和远程 HTTP 调用组合删除 session

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

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

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

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

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

其他有用的信息:

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

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

最佳答案

如果您重定向,Asp.Net 将删除 session token 。有一个 bool 值可以禁用 session 删除。尝试:

Response.Redirect(vm.ReturnUrl, false);

编辑

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

  1. Cookie
  2. Azure 共享 session 缓存

来源:Azure Asp.Net Redirect destroys Session variables

关于c# - 使用 Azure、Https 和远程 HTTP 调用组合删除 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16595849/

相关文章:

c# - Excel 返回日期而不是计算值

c# - 如何解决 NuGet.targets(124,5) : error : Value cannot be > null. (Parameter 'folderName' ) 错误?

c# - 如何中止 ASP.NET MVC 中的操作

c# - 如何将多个相同的功能类( Controller )组合成一个以数据对象作为参数的类?

session - Echo session 中间件不保存

java - getSession() 总是创建一个新 session

c# - INavigationService 作为 MainPage 构造函数参数

c# - ASP.NET MVC5 未为请求的 URL 配置网络服务器,且服务器上未启用目录浏览

c# - 如何在 ASP.NET MVC 站点中实现速率限制?

session - 解析: Session Not Created on Login