Symfony - Cookies et gestion de session

Le composant Symfony HttpFoundation fournit la gestion des cookies et des sessions de manière orientée objet. Cookiefournit un stockage de données côté client et ne prend en charge qu'une petite quantité de données. Habituellement, c'est 2 Ko par domaine et cela dépend du navigateur.Sessionfournit un stockage de données côté serveur et prend en charge une grande quantité de données. Voyons comment créer un cookie et une session dans une application Web Symfony.

Biscuit

Symfony fournit une classe Cookie pour créer un élément de cookie. Créons une couleur de cookie, qui expire dans 24 heures avec valeurblue. Le paramètre constructeur de la classe cookie est le suivant.

  • name (type: string) - nom du cookie
  • value (type: string) - valeur du cookie
  • expire (type: integer / string / datetime) - informations d'expiration
  • path (type: string) - le chemin du serveur dans lequel le cookie est disponible
  • domain (type: string) - l'adresse du domaine dans lequel le cookie est disponible
  • secure (type: boolean) - si le cookie doit être transmis en connexion HTTPS
  • httpOnly (type: boolean) - si le cookie est disponible uniquement dans le protocole HTTP
use Symfony\Component\HttpFoundation\Cookie;  
$cookie = new Cookie('color', 'green', strtotime('tomorrow'), '/', 
   'somedomain.com', true, true);

Symfony fournit également l'option de création de cookies basée sur des chaînes suivante.

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

Maintenant, le cookie créé doit être attaché à l'en-tête de l'objet de réponse http comme suit.

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

Pour obtenir le cookie, nous pouvons utiliser l'objet Request comme suit.

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

Ici, request->cookie est de type PropertyBag et nous pouvons le manipuler à l'aide des méthodes PropertyBag.

Session

Symfony fournit une classe Session implémentant l'interface SessionInterface. Les API de session importantes sont les suivantes,

start - Démarre la session.

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

invalidate - Efface toutes les données de session et régénère l'ID de session.

set - Stocke les données dans la session à l'aide d'une clé.

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

Nous pouvons utiliser n'importe quelle donnée dans la valeur de session, qu'elle soit en simple entier ou en objets complexes.

get - Récupère les données de la session à l'aide de la clé.

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

remove - Supprime une clé de la session.

clear - Supprime les données d'une session.

FlashBag

Session fournit une autre fonctionnalité utile appelée FlashBag. Il s'agit d'un conteneur spécial à l'intérieur de la session contenant les données uniquement lors de la redirection de page. Il est utile dans les redirections http. Avant de rediriger vers une page, les données peuvent être enregistrées dans FlashBag au lieu d'un conteneur de session normal et les données enregistrées seront disponibles dans la requête suivante (la page redirigée). Ensuite, les données seront automatiquement invalidées.

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