Nginx Xdebug设置cookie Xdebug\u会话次数过多

Nginx Xdebug设置cookie Xdebug\u会话次数过多,nginx,xdebug,php,setcookie,Nginx,Xdebug,Php,Setcookie,我使用PhpStorm、xdebug和nginx+phpfpm进行远程调试。当我在请求GET参数中通过XDEBUG\u SESSION\u START=my\u ide\u key时,Nginx将返回502错误代码(坏网关)。同时,我的代码断点在IDE中工作良好。当我没有通过XDEBUG\u SESSION\u START参数nginx时,使用格式良好的HTML和代码200进行响应。但显然,没有这个参数,就没有调试 在nginx错误日志中,我看到了从上游接收到的关于大报头的通知。我尝试转储php

我使用PhpStorm、xdebug和nginx+phpfpm进行远程调试。当我在请求
GET
参数中通过
XDEBUG\u SESSION\u START=my\u ide\u key
时,Nginx将返回502错误代码(坏网关)。同时,我的代码断点在IDE中工作良好。当我没有通过
XDEBUG\u SESSION\u 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插件
smarty\u Internal\u模板中
析构函数(在我启动脚本的最后一行代码之后),如果我调用
headers\u list()
我会看到设置Cookie头的数量在增长(相等的析构函数调用和设置Cookie头数量)。我确信在我的代码中没有一个显式的
头('Set-Cookie:XDEBUG_SESSION=…')
调用。我尝试升级和降级xdebug版本,但仍然有相同的行为。将代码
remove_header('Set-Cookie')
放在
Smarty_Internal_模板上
解决了我的问题,但这是一个丑陋的黑客行为


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

我建议在这种情况下不要使用XDEBUG\u SESSION\u START。在我看来,XDEBUG\u SESSION\u START似乎正在触发服务器端的一些代码执行来设置cookie。这会干扰smarty模板代码

在我使用PHPStorm的所有经验中,我发现打开xdebug的最佳方式是通过bookmarklet,您可以在这里生成bookmarklet:

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

另外,使用PHPStorm的一个技巧是确保PHPStorm已启动并正在运行,并且PHPStorm和phpfpm之间的网络连接工作正常(我想这就是您与nginx结合使用的方法)

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


有几次,我错误地认为这是一个性能问题,浪费了很多时间。

我恐怕无法验证甚至评估您的答案,因为我不再学PHP了。因此,我希望收到bounty starter@jdunk@Devang的任何评论。虽然我很感谢他的努力,但这并不能回答问题,即“为什么在关机时添加了这些额外的“Set Cookie”头?”虽然使用cookie而不是GET参数确实会导致不生成这些额外的头,但这需要使用cookie,cookie用于持久性。使用GET参数是表示“仅此请求”的唯一方法,这样,例如,当浏览器触发几个其他请求(这些请求也由php处理)时,其中一个请求不会在第一个请求之外的调试器循环中卡住。我发布此奖励的目的是了解xdebug特有的情况和/或设置这些头的原因。我有自己的解决办法,@Ostrovski在他的问题中提供了一个。悬赏是为了得到一个令人满意的答案:那些xdebug头的机制。我明白了重点。我突然想到我不知道。像@Ostrovski一样,我这些天在php中不是很活跃,我们正在转向python。用php进行调试将花费太多时间。我的建议是直接联系jetbrains并将此问题提交给他们。我相信他们的一位开发人员会喜欢这个赏金。一些额外的信息:看起来每个注册的关机函数都会调用“Set Cookie”头(从我看到执行关机函数时开始)。在我的情况下,Smarty根本没有被使用。似乎这只是一个php关机函数。另一个可能相关也可能无关的奇怪现象:
headers\u list()
还告诉我,XDEBUG\u会话的两个“Set Cookie”头已经在php代码的第1行设置好了。