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

Php Symfony 2:在登录时为当前会话设置cookie,php,symfony,Php,Symfony,成功登录后是否可以设置会话cookie?事件侦听器?如果有,是哪项活动?以及如何访问响应对象以将cookie附加到响应对象?您可以创建一个EventListener来侦听响应并修改响应 namespace Acme\DemoBundle\EventListener use Symfony\Component\HttpKernel\Event\FilterResponseEvent; use Symfony\Component\HttpFoundation\Cookie; class AddMy

成功登录后是否可以设置会话cookie?事件侦听器?如果有,是哪项活动?以及如何访问响应对象以将cookie附加到响应对象?

您可以创建一个EventListener来侦听响应并修改响应

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'));
        }
    }
}
在您的服务中。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的任何内容(安全上下文、用户管理器、会话等)都可以通过DI容器注入。

cookie必须是cookie,还是足以存储在会话中?它必须是cookie!发出砰的声响!你得到了一个答案:)什么是
/**什么**/
?你能添加一个例子吗?无论你决定添加cookie,都应该进入if。比如检查凭证?我想你应该添加一个小例子。@PatrikKarisch-我正在使用它&它都在工作,直到我找到你的DI容器部分-我很困惑,如何获得设置cookie所需的信息。你有一个例子吗?哪些信息。这完全取决于你在做决定时所依赖的信息。还要注意,DI配置是在Symfony 2.3时代编写的。应该仍然可以在3.x和4.x中使用,但可以简化。