5

Is it possible to set a session cookie, upon successful login? An event listener? If so, which event? And how i can access the response object to attach the cookie to it?

4

1 回答 1

10

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

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 容器注入。

于 2013-05-06T20:33:00.747 回答