php - 从 Paypal 重定向回来后,Wordpress + WooCommerce 中的会话不一致
问题描述
我有一个带有 woocommerce 的 wordpress 商店,它启用了 paypal 付款。
我正在开发一个插件,它从购物车页面上的客户端收集一些数据,将这些数据存储在 woocommerce 会话中。然后客户去贝宝付款,然后在成功付款后被重定向回网站到我的插件应该执行其他任务的订单确认页面。
当我从计算机访问它时,这在我的测试站点上运行良好。但是,当我从我的 android 手机上尝试它时,它对我不起作用。
当我从 Paypal 回来时,会话“似乎”丢失了,并且无法通过 Woocommerce 的 WC()->session->get 访问任何数据
有趣的是,数据仍然存在于数据库的会话表中,只是在我从 Paypal 重定向时没有加载。
为了尝试调试它,我在 index.php 中编写了 2 行代码,每次加载站点时我都会在其中记录 Cookie 标头。当我浏览网站时,我可以看到正在记录的 cookie 数据。
但是,当发生从贝宝返回的导航时,Cookie 标头为空,所以难怪会话没有加载。
我的问题是,我该怎么做才能在我被重定向回网站后访问数据。
PS - 最棘手的部分是问题是间歇性的。我设法找到了一台带有浏览器的笔记本电脑,它的行为与我的 Android 手机完全一样,因此我可以更轻松地检查问题,但在进行了几次测试后,它开始能够在从贝宝导航回网站时访问会话数据。所以基本上现在“它正在工作”,即使从浏览器中清除所有站点数据,我也无法再次重现该问题。但我知道这个问题仍然存在于我办公室之外的某些人身上。
解决方案
我不会假装是第三方 cookie 会话保存方面的专家,但底线是浏览器在导航离开和返回站点时越来越积极地丢弃 cookie,所以你不应该依赖这种类型如果您保存的数据很重要,则保留会话。
最新的 WooCommerce PayPal 模块使用 Express Checkout API,它在将用户重定向之前生成一个 EC-################,当他们从贝宝退货。因此,您可以使用它来跟踪相同的用户返回。但它也支持智能支付按钮,因此您的网站在后台保持加载,无论如何这是一种更好的体验。
推荐阅读
- express - 如何优雅地处理 express 中的 promise 拒绝
- html - 如果父容器旋转,如何不旋转文本
- loops - 如何在haskell中使用do和while循环
- python - 为什么使用 plt.imshow 显示后输出与变量的值不同?
- oracle - 如何将 MMMYYYY 字符串转换为 Oracle 中的日期?
- azure - 我需要在我的 Azure AD 中为用户设置“工作信息”,例如“部门”。Set-AzADUser 没有此参数。还有其他命令吗?
- node.js - Mongodb $lookup 与预初始化
- python - 如何从for循环中的类中获取实例名称
- python-3.x - Python 3 错误:ExternalError:RangeError:main.py 中的第 48 行超出了最大调用堆栈大小
- sql - 使用子查询执行 IIF 条件的最佳方法