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');