【问题标题】:Losing session data after redirecting from a 3rd party API (payment gateway)从第 3 方 API(支付网关)重定向后丢失会话数据
【发布时间】:2020-11-11 15:53:48
【问题描述】:

我正在开发一个基于ASP.NET MVC 的电子商务网站。我们正在使用第三方支付网关进行在线支付交易。基本上,我使用successUrlfailUrl 将用户重定向到支付网关。如果一切顺利,支付网关会将用户重定向到我的successUrl

我面临的问题是,一旦用户被重定向到我的successUrl,我就会丢失所有会话数据。因此,我无法跟踪此用户,也无法进一步处理订单。更多详情:

  1. 我正在使用InProcSessionState
  2. 我在 SessionState 中定义了timeout,但这没有帮助
  3. 我还在Global.asax文件的Session_Start方法中定义了Session.Timeout
  4. 目前我的应用程序使用http,支付网关使用https
  5. 支付网关建立在PHP之上

我的尝试:

我创建了一个虚拟 API,然后从我的电子商务应用向它发送了一个请求,然后将其重定向到我的电子商务应用。在这种情况下,我不会丢失我的会话数据。所以,我不确定这里出了什么问题。

我知道有解决办法,但我更想知道为什么我会丢失会话数据。幕后究竟发生了什么?我能做些什么来解决这个问题?如果你能详细说明,那真的很有帮助。

更新

我刚刚在 Firefox(版本 76.x)和我的解决方案中测试了我的解决方案 作品!!但它不适用于 chrome(75.x 版)

【问题讨论】:

    标签: c# api google-chrome redirect session-state


    【解决方案1】:

    您需要将此代码添加到 Global.asax Session_Start 事件

    if (Response.Cookies["ASP.NET_SessionId"] != null)
    {
        Response.Cookies["ASP.NET_SessionId"].SameSite = SameSiteMode.None;
    }
    

    更多详情请参考this文档。

    【讨论】:

    • 嗨!我正在使用.NET 4.5。我收到一条错误消息,上面写着System.Web.HttpCokkie does not contain a definition for SameSite
    • 你能定位到 4.7.2 吗?
    • 对不起,我不能
    【解决方案2】:

    我不知道这是否是您的问题,但今年我们在支付网关中遇到了同样的问题,我们意识到问题来自SameSite issue of Chrome。向 web.config 添加一些参数为我们解决了这个问题。

    对于 .NET 4.7.2 及更高版本使用

    <configuration>
     <system.web>  
      <sessionState cookieSameSite="None" /> 
     <system.web>
    <configuration>
    

    对于旧版本:

    <system.webServer>
       <rewrite>
          <outboundRules>
            <rule name="Add SameSite" preCondition="No SameSite">
              <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" />
              <action type="Rewrite" value="{R:0}; SameSite=None" />
              <conditions>
              </conditions>
            </rule>
            <preConditions>
              <preCondition name="No SameSite">
                <add input="{RESPONSE_Set_Cookie}" pattern="." />
                <add input="{RESPONSE_Set_Cookie}" pattern="; SameSite=None" negate="true" />
                <add input="{HTTP_USER_AGENT}" pattern="\(iP.*; CPU .*OS 12" negate="true" />
                <add input="{HTTP_USER_AGENT}" pattern="Macintosh; Intel Mac OS X 10_14.*Safari" negate="true" /> 
              </preCondition>
            </preConditions>
          </outboundRules>
       </rewrite>
    </system.webServer>
    

    【讨论】:

    • 智能显示 cookieSameSite 是不允许的。试过了,还是不行。
    • 您使用的是哪个 .net 版本?
    • 您使用的是哪个浏览器?我刚刚在 Firefox 中测试了我的代码,没有任何更改,但它在 chrome 中不起作用。
    • 嗨!在尝试旧版本的代码后,我从 chrome 收到一条错误消息,上面写着 This site can't provide a secure connection
    • 这可能是关于 ssl sertification 你确定没问题吗?
    猜你喜欢
    • 1970-01-01
    • 2017-02-06
    • 2015-09-03
    • 2020-07-14
    • 2021-05-26
    • 2020-12-26
    • 1970-01-01
    • 2019-10-19
    • 2014-03-21
    相关资源
    最近更新 更多