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

C# 从第三方API(支付网关)重定向后丢失会话数据,c#,api,google-chrome,redirect,session-state,C#,Api,Google Chrome,Redirect,Session State,我正在一个电子商务网站上工作,该网站建立在ASP.NETMVC之上。我们使用第三方支付网关进行在线支付交易。基本上,我使用successUrl和failUrl将用户重定向到支付网关。如果一切正常,则支付网关会将用户重定向到mysuccessUrl 我面临的问题是,一旦用户被重定向到我的successUrl,我就会丢失所有会话数据。因此,我无法跟踪此用户,无法进一步处理订单。更多详情: 我正在使用InProcSessionState 我已经在SessionState中定义了超时,但这没有帮助 我还

我正在一个电子商务网站上工作,该网站建立在ASP.NETMVC之上。我们使用第三方支付网关进行在线支付交易。基本上,我使用
successUrl
failUrl
将用户重定向到支付网关。如果一切正常,则支付网关会将用户重定向到my
successUrl

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

  • 我正在使用
    InProc
    SessionState
  • 我已经在SessionState中定义了
    超时
    ,但这没有帮助
  • 我还在
    Session\u Start
    方法的
    Global.asax
    文件中定义了
    Session.Timeout
  • 目前我的应用程序使用
    http
    ,支付网关使用
    https
  • 支付网关构建在
    PHP
  • 我所尝试的:

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

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

    更新

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


    您需要将此代码添加到Global.asax
    Session\u Start
    event

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

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

    您需要将此代码添加到Global.asax
    Session\u Start
    事件中

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

    请参阅文档以了解更多详细信息。

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

    我不知道这是否是您的问题,但今年,我们在支付网关中遇到了同样的问题,我们意识到这个问题是由您造成的。在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>
    
    
    
    intellisense显示不允许使用cookieSameSite。虽然尝试过,但不起作用。您使用的是哪个.net版本?您使用的是哪个浏览器?我刚刚在Firefox中测试过,我的代码可以正常工作,但在chrome中不工作。嗨!在尝试了旧版本的代码后,我从chrome收到一条错误消息,说
    此站点无法提供安全连接
    ,这可能与ssl加密有关。你确定一切正常吗?intellisense显示
    cookieSameSite
    是不允许的。虽然尝试过,但不起作用。您使用的是哪个.net版本?您使用的是哪个浏览器?我刚刚在Firefox中测试过,我的代码可以正常工作,但在chrome中不工作。嗨!在尝试了旧版本的代码后,我从chrome收到一条错误消息,上面说
    此站点无法提供安全连接
    ,这可能与ssl加密有关。你确定一切正常吗?嗨!我正在使用.NET4.5。我收到一条错误消息,上面说,
    System.Web.HttpCokkie不包含SameSite的定义
    4.7.2可以吗?很抱歉,我不能!我正在使用.NET4.5。我收到一条错误消息,上面说,
    System.Web.HttpCokkie不包含SameSite的定义
    您可以将目标设置为4.7.2吗?很抱歉,我不能