2013-04-30 106 views
4

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

+0

是否有必要成为一个cookie,还是足以将其存储在会话中? – 2013-05-01 22:51:45

+0

它必须是一个饼干! – vinnylinux 2013-05-06 18:44:03

+0

ping!你有一个答案:) – 2013-05-08 08:11:30

回答

9

您可以创建一个侦听kernel.response Event并修改响应的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')); 
     } 
    } 
} 
在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,会话等)可以注入槽的DI容器。

+0

什么是'/ **什么** /'?你可以添加一个例子吗? – 2015-06-23 09:06:45

+0

无论你做什么决定添加cookie,都应该进入if。 – 2015-06-23 19:13:56

+0

就像检查凭证一样?我想你应该添加一个小例子。 – 2015-06-23 19:15:52

相关问题