La persistance des données de connexion est une fonction centrale des applications web. Par défaut, Symfony gère cette tâche via le système de fichiers du serveur. L’évolution d’une infrastructure vers des environnements conteneurisés nécessite d’adapter cette approche pour garantir la stabilité de l’application.
Découvrir Redis
Redis (Remote Dictionary Server) est un système de gestion de base de données en mémoire, fonctionnant sur le principe du clé-valeur. Contrairement aux bases de données relationnelles classiques qui écrivent sur un disque dur, Redis conserve l’intégralité de ses données dans la mémoire vive (RAM) du serveur.
Cette architecture lui confère des temps de lecture et d’écriture extrêmement courts. Dans le contexte d’une application web, Redis est utilisé pour stocker des données éphémères mais critiques, telles que le cache de l’application ou les sessions des utilisateurs. Il agit comme un service indépendant : si l’application redémarre, les données stockées dans Redis restent intactes, ce qui permet de maintenir les utilisateurs connectés lors d’une mise à jour ou d’un redémarrage des serveurs applicatifs.
Configurer les sessions dans Symfony : Les options existantes
Symfony propose plusieurs méthodes pour stocker les sessions. Le choix dépend de la taille de l’infrastructure et des besoins de l’application. Voici un comparatif des solutions courantes :
| Méthode de stockage | Avantages | Inconvénients | Cas d’usage recommandé |
|---|---|---|---|
| Système de fichiers (Défaut) | Configuration native, aucune dépendance requise. | Perte des sessions au redémarrage des conteneurs. Incompatible avec les architectures multi-serveurs. | Développement local, sites à instance unique. |
| Base de données (SQL) | Centralisation des données, persistance garantie. | Lenteur des requêtes d’écriture/lecture sur disque. Charge supplémentaire sur la base de données principale. | Applications où l’ajout d’un service externe est impossible. |
| Redis | Performances optimales (RAM), centralisation, scalabilité horizontale, TTL (durée de vie) géré nativement. | Nécessite le déploiement et la maintenance d’un service supplémentaire. | Applications en production, architectures Docker, répartiteurs de charge (Load Balancing). |
Mettre en œuvre les sessions dans Redis
L’intégration de Redis requiert la modification de l’infrastructure Docker et de la configuration du framework Symfony.
Configuration de Docker Compose
Il est nécessaire de déclarer un conteneur Redis et de fournir son adresse au conteneur PHP via une variable d’environnement.
YAML
services:
php:
build: .
environment:
REDIS_URL: "redis://redis:6379"
depends_on:
- redis
redis:
image: redis:7-alpine
ports:
- "6379:6379"
| Clé Docker | Valeur d’exemple | Explication |
|---|---|---|
| image | redis:7-alpine | Utilise la version 7 de Redis basée sur Alpine Linux pour réduire le poids du conteneur. |
| ports | "6379:6379" | Expose le port par défaut de Redis (6379) sur la machine hôte pour permettre le débogage. |
| REDIS_URL | "redis://redis:6379" | Chaîne de connexion. Le premier « redis » est le protocole, le second est le nom du service cible, suivi du port. |
Configuration de Symfony
La déclaration du gestionnaire de session s’effectue dans le fichier config/packages/framework.yaml.
YAML
framework:
session:
handler_id: 'Redis'
save_path: '%env(REDIS_URL)%'
cookie_secure: auto
cookie_samesite: lax
| Clé YAML | Valeur attribuée | Rôle et explication |
|---|---|---|
| handler_id | 'Redis' | Indique à Symfony d’utiliser l’extension PHP native phpredis (ou un service compatible) pour manipuler les sessions, remplaçant le gestionnaire de fichiers par défaut. |
| save_path | '%env(REDIS_URL)%' | Cible l’adresse du serveur Redis. L’utilisation de %env()% permet de récupérer la variable définie dans le fichier docker-compose.yaml ou le .env. |
| cookie_secure | auto | Configure le cookie de session pour qu’il soit transmis uniquement via une connexion chiffrée (HTTPS). Le paramètre auto désactive cette restriction en HTTP (utile en développement local). |
| cookie_samesite | lax | Règle de sécurité. lax autorise l’envoi du cookie lors de la navigation de site à site (clic sur un lien externe), mais le bloque pour les requêtes transverses (protection CSRF). |
Commandes essentielles du serveur Redis
Avant d’inspecter une session spécifique, il est pertinent de connaître les commandes de base pour manipuler et observer les données au sein de votre instance Redis via l’interface en ligne de commande (CLI). Pour accéder au CLI depuis votre terminal, utilisez : docker compose exec redis redis-cli.
| Commande | Fonction | Exemple d’utilisation | Note technique |
|---|---|---|---|
| PING | Vérifie que le serveur Redis est actif et répond aux requêtes. | PING (le serveur retourne PONG) | Utile pour tester la connexion réseau entre les conteneurs. |
| KEYS | Liste les clés stockées correspondant à un motif de recherche. | KEYS * ou KEYS PHPREDIS_SESSION:* | Commande bloquante. À éviter sur un serveur de production ayant un grand volume de données. |
| GET | Affiche la valeur contenue dans une clé spécifique. | GET masecretecle123 | Retourne la chaîne sérialisée de la session. |
| DEL | Supprime définitivement une ou plusieurs clés de la mémoire. | DEL masecretecle123 | Force la déconnexion de l’utilisateur ciblé. |
| TTL | Affiche le temps restant (Time To Live) avant la suppression automatique d’une clé, en secondes. | TTL masecretecle123 | Retourne -2 si la clé n’existe pas, et -1 si elle n’a aucune expiration configurée. |
| FLUSHDB | Vide intégralement la base de données actuellement sélectionnée. | FLUSHDB | Provoque la déconnexion immédiate de tous les utilisateurs actifs. |
Trouver et inspecter la session d’un utilisateur
Pour vérifier que la configuration est fonctionnelle, vous pouvez inspecter les données directement dans la mémoire de Redis en utilisant les commandes présentées ci-dessus.
Étape 1 : Identifier le jeton de session
- Ouvrez l’application web dans votre navigateur.
- Ouvrez les outils de développement (touche F12), onglet Application ou Stockage, section Cookies.
- Copiez la valeur associée à la clé
PHPSESSID(exemple :a1b2c3d4e5).
Étape 2 : Lire les données dans Redis Exécutez la commande suivante dans votre terminal pour ouvrir l’interface de commande Redis (CLI) :
Bash
docker compose exec redis redis-cli
Recherchez la clé de session avec la commande GET (Symfony ajoute parfois un préfixe, ou stocke directement l’ID) :
Bash
GET a1b2c3d4e5
Le terminal retournera une chaîne sérialisée contenant les données de session (identifiant utilisateur, rôles de sécurité, messages flash).
Étape 3 : Surveiller le trafic en temps réel Pour observer le dialogue entre Symfony et Redis lors du chargement d’une page, utilisez l’outil de surveillance de Redis :
Bash
docker compose exec redis redis-cli MONITOR
En rafraîchissant votre navigateur, vous verrez s’afficher les commandes GET (pour lire la session) et SETEX (pour mettre à jour la session avec un nouveau délai d’expiration).
FAQ
Faut-il installer une extension PHP spécifique pour utiliser cette configuration ? Oui, la valeur handler_id: 'Redis'nécessite que l’extension phpredis soit installée et activée dans votre conteneur ou serveur PHP. Sans elle, Symfony retournera une erreur de service non trouvé.
Comment la durée de vie (TTL) des sessions est-elle gérée dans Redis ? Redis gère l’expiration des clés de manière native. Symfony transmet la durée de vie configurée dans l’application (via framework.session.cookie_lifetime) au moment de la commande d’écriture (SETEX). Une fois le délai écoulé, Redis supprime la clé automatiquement.
Est-il possible de séparer le cache applicatif des sessions dans Redis ? Oui. Pour éviter d’écraser des données ou de saturer la base, il est recommandé d’utiliser des bases de données logiques différentes sur le même serveur Redis en modifiant l’URL : redis://redis:6379/0 pour le cache et redis://redis:6379/1 pour les sessions.
Pour en savoir plus
Sur Tellaw.org :
Liens externes :
- Documentation Symfony – Configuration des sessions
- Documentation Redis – Commandes CLI et gestion de la mémoire
Si cet article vous a aidé à configurer votre infrastructure technique, nous vous invitons à le partager sur vos réseaux sociaux professionnels en ajoutant un lien vers Tellaw.org.
[…] Gestion des sessions Symfony : Déploiement avec Redis et Docker Compose […]