我有一个使用 PHP 和 PayPal API 的应用程序。获取付款的基本方式是,您对 PayPal 进行 Web 服务调用以获取令牌,然后使用该令牌将浏览器重定向到 PayPal,以便用户付款。确认付款详细信息后,PayPal 会重定向回您最初在服务调用中设置的 URL。
这一切都有效,每天都有数百万人使用它,等等。
奇怪的是,当 PayPal 重定向回来时,PHP 会话就消失了。它是有据可查的问题.
第一个问题:为什么会出现这种情况?两个页面都位于同一域,都使用 HTTPS。该会话适用于所有请求,直到 PayPal 重定向回来。
链接的论坛主题建议了一种解决方法,将会话 ID 保留在 PayPal 请求中,然后稍后检索并恢复会话。太棒了,只是它似乎不起作用。
我可以添加一些日志语句:
log(session_id());
各种重定向之前和之后。从 PayPal 回来后,我又记录了一些。
log("session id is " . session_id());
$session_id = get_session_id_from_paypal();
log("setting it back to " . $session_id);
session_id($session_id);
session_start();
log("session id is now " . session_id());
结果根本不是我所期望的:
session_id
是 fc8f459a186a3f4695ff9ac71b563825
将其设置回 82460dcf8c8ddd538466e7cb89712e72
session_id
现在是 360ba3fd99d233e0735397278d2b2e55
第二个问题:为什么会话 ID 根本不是我设置的?我究竟做错了什么?或者,至少,为什么会话变量没有返回?
只是一个想法...
你有session.referer_check
也许设置为您的主机?
默认值是空字符串,但它可能已被更改......并且当页面从 PayPal“返回”时,php 将丢弃会话信息。
您可以检查session.referer_check
与 phpinfo() 一起使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)