Symfony - Cookies y gestión de sesiones

El componente Symfony HttpFoundation proporciona gestión de sesiones y cookies de una manera orientada a objetos. Cookieproporciona almacenamiento de datos del lado del cliente y solo admite una pequeña cantidad de datos. Por lo general, es de 2 KB por dominio y depende del navegador.Sessionproporciona almacenamiento de datos del lado del servidor y admite una gran cantidad de datos. Veamos cómo crear una cookie y una sesión en una aplicación web Symfony.

Galleta

Symfony proporciona la clase Cookie para crear un elemento de cookie. Creemos una cookie de color, que caduca en 24 horas con valorblue. El parámetro constructor de la clase de cookie es el siguiente.

  • nombre (tipo: cadena) - nombre de la cookie
  • valor (tipo: cadena) - valor de la cookie
  • expire (tipo: integer / string / datetime) - información de expiración
  • ruta (tipo: cadena): la ruta del servidor en la que está disponible la cookie
  • dominio (tipo: cadena): la dirección de dominio en la que está disponible la cookie
  • seguro (tipo: booleano): si la cookie debe transmitirse en una conexión HTTPS
  • httpOnly (tipo: booleano): si la cookie está disponible solo en el protocolo HTTP
use Symfony\Component\HttpFoundation\Cookie;  
$cookie = new Cookie('color', 'green', strtotime('tomorrow'), '/', 
   'somedomain.com', true, true);

Symfony también proporciona la siguiente opción de creación de cookies basada en cadenas.

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

Ahora, la cookie creada debe adjuntarse al encabezado del objeto de respuesta http de la siguiente manera.

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

Para obtener la cookie, podemos usar el objeto Request de la siguiente manera.

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

Aquí, request->cookie es de tipo PropertyBag y podemos manipularlo usando métodos PropertyBag.

Sesión

Symfony proporciona una clase Session que implementa la interfaz SessionInterface. La API de sesión importante es la siguiente,

start - Inicia la sesión.

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

invalidate - Borra todos los datos de la sesión y regenera el ID de la sesión.

set - Almacena datos en la sesión usando una clave.

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

Podemos usar cualquier dato en el valor de la sesión, desde un entero simple hasta objetos complejos.

get - Obtiene datos de la sesión usando la clave.

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

remove - Elimina una clave de la sesión.

clear - Elimina los datos de una sesión.

FlashBag

Session proporciona otra característica útil llamada FlashBag. Es un contenedor especial dentro de la sesión que contiene los datos solo durante la redirección de la página. Es útil en redireccionamientos http. Antes de redirigir a una página, los datos se pueden guardar en FlashBag en lugar de un contenedor de sesión normal y los datos guardados estarán disponibles en la siguiente solicitud (la página redirigida). Entonces, los datos se invalidarán automáticamente.

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