Symfony 2:登录时为当前会话设置cookie

时间:2013-04-30 20:52:13

标签: php symfony

成功登录后是否可以设置会话cookie?一个事件监听器?如果是这样,哪个事件?我如何访问响应对象以将cookie附加到它?

1 个答案:

答案 0 :(得分:9)

您可以创建一个EventListener来侦听kernel.response Event并修改响应。

namespace Acme\DemoBundle\EventListener
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpFoundation\Cookie;

class AddMyCookie
{
    public function onKernelResponse(FilterResponseEvent $event)
    {
        $response = $event->getResponse();

        if (/** whatever **/) {
            $response->headers->setCookie(new Cookie('cookie_name', 'cookie_value'));
        }
    }
}

在您的services.yml中:

parameters:
    acme_demo.add_my_cookie.class: Acme\DemoBundle\EventListener\AddMyCookie

services:
    acme_demo.add_my_cookie.kernel_response_listener:
        class: %acme_demo.add_my_cookie.class%
        tags:
            - { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }

无论您需要决定设置cookie(security_context,usermanager,session等),都可以通过DI容器注入。