2013-04-30 105 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

相關問題