从Paypal重定向回后,Wordpress + WooCommerce中的会话不一致

问题描述

我有一家带有woocommerce的wordpress商店,该商店启用了贝宝付款。

我正在开发一个插件,该插件可以在购物车页面上从客户端收集一些数据,并将这些数据存储在woocommerce会话中。然后客户转到Paypal进行支付,然后在成功付款后将其重定向站点到订单确认页面,在该页面上我的插件应执行其他任务。

当我从计算机访问它时,这在我的测试站点效果很好。但是,当我从Android手机上尝试时,它对我不起作用。

当我从贝宝(Paypal)返回时,会话“似乎”将丢失,并且无法通过Woocommerce的WC()-> session-> get

访问任何数据

有趣的是,数据仍然存在于数据库的会话表中,当我从Paypal重定向时,只是没有加载数据。

为了尝试调试此问题,我在index.PHP中写了两行代码,每次站点加载时,我都会在其中编写日志Cookie头。在网站上浏览时,我可以看到正在记录的Cookie数据。

但是,当发生从Paypal返回的导航时,Cookie标头为空,因此也就难怪会话不会被加载。

我的问题是,我该怎么办,以便在重定向站点后可以访问数据。

PS-最棘手的部分是问题是间歇性的。我设法找到一台笔记本电脑,其浏览器的行为与我的Android手机完全相同,因此我可以更轻松地检查问题,但经过几次测试,从贝宝(Paypal)导航回站点时,它开始能够访问会话数据。因此,基本上现在“它正在运行”,即使从浏览器中清除了所有站点数据,我也无法再次再现该问题。但是我知道,对于我办公室以外的某些人来说,问题仍然存在。

解决方法

我不会假装自己是第三方Cookie会话保存方面的专家,但最重要的是,浏览器在导航离开网站并返回网站时越来越主动地删除Cookie,因此您不应该依赖如果您要保存的数据很重要,请使用这种会话保存方式。

最新的WooCommerce PayPal模块使用Express Checkout API,该API会在将用户重定向至其他用户之前生成EC-#################他们从PayPal返回时的网址。因此,您可以使用它来跟踪返回的同一用户。但是它还支持“智能付款按钮”,因此您的网站始终处于后台加载状态,无论如何都是更好的体验。