0

我的一项服务(kernel.response 上的事件侦听器)有一个奇怪的问题。

我想在其中设置一些 cookie(我需要 cookie 而不是 session 以与 Symfony1 兼容),但找不到如何..

直到最后我才明白我写的代码是有效的,除非我在其中调试一些东西(比如var_dumpcookie)。

public function onKernelResponse(FilterResponseEvent $event)
{
    if (HttpKernel::MASTER_REQUEST == $event->getRequestType()):

    $request = $event->getRequest();
    $response = $event->getResponse();
    var_dump($request->cookies->all());
    $response->headers->setCookie(new Cookie('foo', 'bar'));

    endif;
}

所以那行不通,我的 cookie 从未在$request->cookies->all().

但是,如果我评论该var_dump行,刷新并取消评论,则 cookie 已设置!

正常吗?为什么 ?在这样的事件中打印会破坏标题吗?!

4

2 回答 2

3

注入logger服务并使用它

$this->logger->debug(print_r($request->cookies->all(), true));
于 2013-07-25T09:15:44.227 回答
0

这是因为这样做var_dump(),您“强制” php 发送标头,因此,当尝试直接在您的响应中设置标头时,它不起作用,因为它们已经被填充。

尝试var_dump()在标头中设置 cookie 之后进行操作。

于 2013-07-25T08:31:38.003 回答