Symfony - Cookies e gerenciamento de sessão

O componente Symfony HttpFoundation fornece cookies e gerenciamento de sessão de uma maneira orientada a objetos. Cookiefornece armazenamento de dados do lado do cliente e suporta apenas uma pequena quantidade de dados. Normalmente, é de 2 KB por domínio e depende do navegador.Sessionfornece armazenamento de dados do lado do servidor e suporta uma grande quantidade de dados. Vamos ver como criar um cookie e uma sessão em um aplicativo da web Symfony.

Bolacha

Symfony fornece a classe Cookie para criar um item de cookie. Vamos criar uma cor de cookie, que expira em 24 horas com valorblue. O parâmetro do construtor da classe cookie é o seguinte.

  • nome (tipo: string) - nome do cookie
  • valor (tipo: string) - valor do cookie
  • expire (type: integer / string / datetime) - informações de expiração
  • caminho (tipo: string) - o caminho do servidor no qual o cookie está disponível
  • domínio (tipo: string) - o endereço de domínio no qual o cookie está disponível
  • seguro (tipo: booleano) - se o cookie precisa ser transmitido na conexão HTTPS
  • httpOnly (type: boolean) - se o cookie está disponível apenas no protocolo HTTP
use Symfony\Component\HttpFoundation\Cookie;  
$cookie = new Cookie('color', 'green', strtotime('tomorrow'), '/', 
   'somedomain.com', true, true);

Symfony também oferece a seguinte opção de criação de cookie baseada em string.

$cookie = Cookie::fromString('color = green; expires = Web, 4-May-2017 18:00:00 +0100; 
path=/; domain = somedomain.com; secure; httponly');

Agora, o cookie criado precisa ser anexado ao cabeçalho do objeto de resposta http da seguinte maneira.

$response->headers->setCookie($cookie);

Para obter o cookie, podemos usar o objeto Request da seguinte maneira.

$cookie = $request->cookie->get('color');

Aqui, request->cookie é do tipo PropertyBag e podemos manipulá-lo usando métodos PropertyBag.

Sessão

Symfony fornece uma classe Session que implementa a interface SessionInterface. As APIs de sessão importantes são as seguintes,

start - Inicia a sessão.

Session $session = new Session(); 
$session->start();

invalidate - Limpa todos os dados da sessão e regenera o ID da sessão.

set - Armazena dados na sessão usando uma chave.

$session->set('key', 'value');

Podemos usar qualquer dado no valor da sessão, seja em um inteiro simples para objetos complexos.

get - Obtém dados da sessão usando a chave.

$val = $session->get('key');

remove - Remove uma chave da sessão.

clear - Remove os dados de uma sessão.

FlashBag

A sessão oferece outro recurso útil chamado FlashBag. É um contêiner especial dentro da sessão que mantém os dados apenas durante o redirecionamento da página. É útil em redirecionamentos http. Antes de redirecionar para uma página, os dados podem ser salvos em FlashBag em vez de um contêiner de sessão normal e os dados salvos estarão disponíveis na próxima solicitação (a página redirecionada). Então, os dados serão invalidados automaticamente.

$session->getFlashBag()->add('key', 'value');  
$session->getFlashBag()->get('key');