ASP.NET MVC 5-会话ID随Cyber source答复mvc-action而更改。丢失会话对象

问题描述 投票:0回答:1

。NET Framework 4.5.2上的ASP.NET MVC 5应用程序。

使用Cyber​​Source提交付款。

[将付款发送参数提交给Cyber​​Source时:“ override_custom_receipt_page”,指定Cyber​​source处理付款后应返回的MVC操作。

在生产环境中,付款发送到

 https://secureacceptance.cybersource.com . . . .

一切正常。

在本地,DEV,QA环境中,付款发送至

 https://testsecureacceptance.cybersource.com . . . .

并且在这些环境中,CS确实会返回到指定的MVC操作,但是SessionId是不同的,而不是向CS发送请求的会话的SessionId。

当然,MVC操作找不到处理来自CS的回复所需的任何Session对象。

并且回复处理不正确。

我用谷歌搜索,发现一些信息可以更改会话ID,尝试了一些建议,没有帮助。

Global.asax.cs确实具有Session_Start:

protected void Session_Start()
{
     Session["init"] = 0;
}

也,在web.config中:

<sessionState mode="InProc" customProvider="DefaultSessionProvider" timeout="20">    
    <providers>
        <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=<..value here..>" connectionStringName="DefaultConnection" />
    </providers>
</sessionState>

DEV,QA,PROD环境在Azure中。

而且,到目前为止,代码可以正常工作5年,然后在Local,DEV和QA中中断。

[在将DEV和QA环境移至Azure之后,似乎已经崩溃了。

但是,本地环境不在Azure中,它是我自己的笔记本电脑。

没有本地,DEV,QA的负载平衡器。

另外,我刚刚在“ Chrome浏览器自2019年12月起更改了Cookie的工作方式”上找到了相关信息,关于sameSite属性。但是,再次-为什么相同的代码在没有sameSite的情况下也可以在生产环境中工作

并且在其他环境中不起作用?

如果有人对可能发生的事情有任何想法,为什么CS无法回到同一会话,将不胜感激。

非常感谢

c# asp.net-mvc asp.net-mvc-5 cybersource
1个回答
0
投票

我们在使用其他付款网关时遇到了类似的问题。在我们的例子中,会话变量在DEV中有效,但在生产环境中无效。

主要是因为会话附加到线程上,并且当付款网关返回网站的回调URL时,它正在创建一个新线程并失去会话变量。

为了解决该问题,我们将参考号(在本例中为发票号)传递给了付款网关。付款成功后,网关会返回参考号以及其他详细信息。我们从参考编号中检索了客户详细信息,然后继续进行下一步。

© www.soinside.com 2019 - 2024. All rights reserved.