Xdebug 设置cookie XDEBUG_SESSION太多次


Xdebug set cookie XDEBUG_SESSION too many times

我使用 PhpStorm、xdebug 和 nginx + php-fpm 进行远程调试。当我在请求GET参数中传递XDEBUG_SESSION_START=my_ide_key时,Nginx 回复了 502 错误代码(网关错误)。同时,我在IDE中的代码断点工作正常。当我不传递XDEBUG_SESSION_START参数nginx时,使用格式良好的HTML和代码200响应。但很明显,没有这个参数就没有调试。

在nginx错误日志中,我看到从上游收到的有关大标头的通知。我尝试转储php-fpm和nginx之间的通信,只有一个不同的东西是Set-Cookie标头:

Set-Cookie: XDEBUG_SESSION=666; expires=Mon, 16-Sep-2013 16:07:28 GMT; path=/

我尝试查找此标头何时出现在响应中。我发现在我的聪明插件中Smarty_Internal_Template析构函数(在我的启动脚本的最后一行代码之后),如果我调用headers_list()我会看到越来越多的 Set-Cookie 标头(相等的析构函数调用和 Set-Cookie 标头数量)。我确信我的代码中没有一个显式header('Set-Cookie: XDEBUG_SESSION=...')调用。我尝试升级和降级 xdebug 版本,但仍然有相同的行为。将代码remove_header('Set-Cookie')放在Smarty_Internal_Template解决了我的问题,但这是丑陋的黑客!

对这种奇怪的情况有什么想法吗?

我建议在这种情况下不要使用XDEBUG_SESSION_START。对我来说,看起来XDEBUG_SESSION_START正在服务器端触发一些代码执行来设置 cookie。这会干扰智能模板代码。

根据我对 PHPStorm 的所有经验,我发现打开 xdebug 的最佳方式是通过书签,您可以在此处生成:

https://www.jetbrains.com/phpstorm/marklets/

书签在浏览器本身中设置 cookie。因此,服务器中不会执行任何代码来设置XDEBUG_SESSION和路径变量,这可以减少或消除对智能代码的干扰。

另外,PHPStorm 的一个提示是确保 PHPStorm 已启动并运行,并且 PHPStorm 和 php-fpm 之间的网络连接正常工作(我认为这就是您与 nginx 结合使用的内容)。

如果 php-fpm 无法连接到 PHPStorm,根据我的经验,代码最终将在服务器上执行,但速度会非常慢。

几次我错误地将其视为性能问题并浪费了很多时间。