从支付网关回发时丢失会话

Posted

技术标签:

【中文标题】从支付网关回发时丢失会话【英文标题】:Losing session on a post back from a payment gateway 【发布时间】:2019-10-19 05:07:16 【问题描述】:

我有一个 .NET Web 应用程序,在用户在支付网关上付款后,我似乎在回发时丢失了会话。 1. 用户登录门户 2. 基于门户中的交易,在某一时刻被定向到支付网关门户 3. 当调用第三方支付网关时,我们传递支付状态发布到的回调 URL 以及一些详细信息 4. 当我通过跟踪运行它时,我看到用户登录我的应用程序时生成的 ASP.NET_SessionId cookie 在上面的第 3 步中由支付网关传回给我。 5.此时,当我尝试检索会话详细信息时,它们丢失了。结果我将用户扔回登录页面而不是确认付款状态,

我相信当从支付网关回发时,会话不会在我的 IIS 中检索到。我检查了 AppPool 回收超时(设置为默认值 1740 ),这将回收会话。然而,这在 1740 分钟的时间跨度内发生了多次。我的默认空闲超时是 20 分钟。当它确实发生时,用户空闲时间不会超过 20 分钟

这是间歇性的,在一天中的任何特定时间点都可能发生在少数用户身上。 可能是什么原因造成的?如何跟踪 IIS 中的会话以查看它是否真的过期了?

【问题讨论】:

你解决了吗? 我遇到了类似的问题。有什么解决方案可以解决这个问题吗? 我们确定从支付网关返回到我们门户的响应是重定向。然而,当用户使用 HTTPS 登录门户时,我们配置的重定向 URL 使用 HTTP。因此,我相信 HTTP 重定向相同的会话不可用,因此丢失了所有支付数据以上传支付网关交易的结果。 【参考方案1】:

我实际上也面临着类似的事情。

我还没有解决它,但这里有几件事我必须检查。

确保您将支付网关返回到的 URL 是相同的 http/https 机制。如果您的会话 cookie 仅是安全的,而您返回到非安全状态,则会话将丢失。

我正在苦苦挣扎,因为即使会话应该仍然处于活动状态,我唯一可以恢复的方法是将会话 ID 附加到不太安全的 url。

然后在 session_start 调用之前添加到我的代码中

if (isset($_POST['sessionname'])) 
     session_id($_POST['sessionname']);


session_start();

【讨论】:

以上是关于从支付网关回发时丢失会话的主要内容,如果未能解决你的问题,请参考以下文章

jQuery填充的Gridview在回发时丢失数据

DropDownList 中的 ListItems 属性在回发时丢失?

由 javascript 更改时回发时丢失的值

Gridview 中 TemplateField 中的复选框在回发时丢失

ASP.NET,使用 .Controls.Add() 添加的控件在页面回发时丢失,如果我使用 .InnerHtml 添加它们,我无法引用它们

避免在部分回发时重复样式