【发布时间】:2020-12-18 22:01:59
【问题描述】:
自 8 月初以来,我的用户目前在使用 Chrome 向 Moneris 付款时都会丢失会话。它在 Firefox 下运行良好。代码几年来一直没有改变,一切都是自动开始的。
支付“summary.php”页面首先调用网关URL,然后在交易完成后返回“return.php”页面。此返回页面仅包含一个表单,该表单获取交易密钥并将其发送回网关以进行验证:
<?php
session_start();
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script>
function verify_transaction() {
document.getElementById('verify').submit();
}
</script>
</head>
<body onload="verify_transaction()">
<form id="verify" name="verify" action="https://www.gateway.com/verify.php" method="post">
<input type="hidden" name="ps_store_id" value="abcdef">
<input type="hidden" name="hpp_key" value="abcdef">
<input type="hidden" name="transactionKey" value="<?php echo $_POST['transactionKey'] ?>">
</form>
</body>
</html>
这里的问题是调用此页面时所有会话数据都消失了。我也无法将会话存储在任何地方,因为网关无法将我开始发送的信息发回给我。
恐怕这可能与 Chrome 的 7 月版本有关,该版本在 cmets 中有以下内容: “Same Site Cookie 政策更改再次开始推出”
8 月版本也是如此: “拒绝不安全的 SameSite=None cookie”,但我不知道如何/在哪里解决这个问题。
网站托管在 CPANEL 上,我确保用户一直使用 HTTPS。
有人有什么建议吗?
编辑:
我刚刚注意到,当我登录和退出网站时,我会收到很多这样的信息:
“与https://google.com/ 处的跨站点资源关联的 cookie 被设置为没有 SameSite 属性。它已被阻止,因为 Chrome 现在只提供带有跨站点请求的 cookie,如果它们设置为 SameSite=None和Secure。您可以在开发者工具中的Application>Storage>Cookies 下查看cookie,并在https://www.chromestatus.com/feature/5088147346030592 和https://www.chromestatus.com/feature/5633521622188032." 上查看更多详细信息
【问题讨论】:
-
$_POST['transactionKey']实际上不是会话变量,而是来自 POST 请求的属性,它会将用户发送到此页面。您能否在您的 Chrome 开发人员工具中检查请求(在网络选项卡下)并查看发送至return.php的请求的确切详细信息? -
也启用错误报告。
-
很抱歉,我错误地说 POST 是会话的一部分!所以在这种情况下,我实际上能够从网关获取 transactionKey 并将其发送回,但此时对用户会话的任何引用都消失了。
-
也许您在往返支付网关时也会发送会话 ID。 (虽然你应该可以解决cookie问题,但还没有真正开始自己调查问题)
-
我能够使用 Chrome 在 3 个使用 2 个独立支付网关的独立站点上完全重现这一点。当支付网关在成功/拒绝回发后返回站点时,就好像会话丢失了。似乎只影响 Chrome
标签: javascript php forms session payment-gateway