【发布时间】:2013-09-16 15:28:31
【问题描述】:
我使用 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 插件 Smarty_Internal_Template 析构函数中(在我的启动脚本的最后一个代码行之后)如果我调用 headers_list() 我会看到越来越多的 Set-Cookie 标头(相等的析构函数调用和 Set-Cookie 标头数量) .我确信我的代码中没有明确的header('Set-Cookie: XDEBUG_SESSION=...') 调用。我尝试升级和降级 xdebug 版本,但仍然有相同的行为。将代码remove_header('Set-Cookie') 放在Smarty_Internal_Template 解决了我的问题,但那是丑陋的黑客!
对这种奇怪的情况有什么想法吗?
【问题讨论】:
-
一些附加信息:看起来每个注册的关闭函数都会调用“Set-Cookie”标头(从我看到逐步执行关闭函数时开始)。就我而言,Smarty 根本没有被使用。似乎这只是一个 php-shutdown-function-in-general 的东西。
-
另一个可能相关也可能不相关的奇怪现象:
headers_list()还向我展示了 XDEBUG_SESSION 的 两个 'Set-Cookie' 标头已由我的 php 的第 1 行设置代码。
标签: nginx xdebug php setcookie