从第三方API(付款网关)重定向后,会话数据丢失

时间:2020-07-22 06:57:26

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

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

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

  1. 我正在使用InProc SessionState
  2. 我已经在SessionState中定义了timeout,但这无济于事
  3. 我还在Session.Timeout文件的Session_Start方法中定义了Global.asax
  4. 当前我的应用程序使用http,而支付网关使用https
  5. 付款网关建立在PHP之上

我尝试过的事情:

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

我知道可以解决这个问题,但是我更想知道为什么我丢失了会话数据。幕后到底发生了什么?我该怎么办才能解决这个问题?如果您能详细说明,那真的很有帮助。

更新

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

2 个答案:

答案 0 :(得分:1)

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

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

有关更多详细信息,请参阅this文档。

答案 1 :(得分:1)

我不知道这是否是您的问题,但是今年我们在支付网关中遇到了同样的问题,我们意识到问题出在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>