如何阻止cURL使我的PHP会话死锁


How do I stop cURL from deadlocking my PHP session?

因此,基本上,我使用cURL来调用无法在PHP中本地实现的API。然而,当我进行调用时,它会使我的PHP会话死锁。我无法从浏览器中的另一个选项卡连接到我的网站。如果我删除会话cookie,我可以正常连接。以前,当我在cURL中没有超时时,这种情况会无限期地持续下去。

这就是cURL的PHP实现的工作方式吗?或者有办法绕过它吗?

如前所述,您可能希望在不打开会话的情况下尝试执行cURL请求,例如,在发送请求之前执行session_write_close(),在处理请求之后执行session_start()

这与cURL无关:基本上每个长时间运行的操作都容易出现相同的问题。

以下是我们通常处理此问题的方法:

  • 应该启动进程的请求(例如启动cURL命令)不应该这样做,而应该对其进行身份验证并为其创建一个一次性票证,将其存储在会话中并返回
  • 在返回时,客户端现在应该请求运行cURL,使用一次性票证,但不使用会话。这将使会话保持解锁状态。结果必须中间存储
  • 在完成长时间运行的过程之后,客户端使用会话来收集中间存储的结果