Laravel 13.31.0 est disponible depuis le 8 septembre 2026. Sous un numéro mineur, cette livraison corrige un défaut de sécurité dans l’authentification par cookie « se souvenir de moi », fiabilise les files d’attente sur Redis en cluster et affine plusieurs comportements d’Eloquent. Une quarantaine de correctifs complètent l’ensemble, du client HTTP aux migrations.
Un correctif de sécurité sur l’authentification par cookie
Le point le plus sensible de cette version concerne le mécanisme « se souvenir de moi ». Laravel garantit désormais que le hash du mot de passe correspond à celui stocké dans le cookie recaller avant d’authentifier l’utilisateur. Le correctif, d’abord porté sur la branche 12.x, ferme une fenêtre où un cookie de rappel pouvait rester exploitable après un changement de mot de passe.
Dans le même domaine, une TypeError qui survenait dans userFromRecaller() lorsque le cookie ne correspondait à aucun utilisateur a été corrigée. Les applications qui s’appuient massivement sur la connexion persistante ont tout intérêt à appliquer la montée de version rapidement.
Des files d’attente plus sûres en cluster Redis
Le pilote de file Redis reçoit une implémentation « cluster-safe » : les opérations MULTI et KEYS sont revues pour se comporter correctement quand les clés sont réparties sur plusieurs nœuds. Sur les infrastructures qui distribuent Redis en cluster, c’est la fin d’une classe de bugs difficiles à reproduire.
Deux ajouts accompagnent ce travail. La méthode Queue::totalSize() expose la taille d’une file, et un nouvel événement JobInterrupted se déclenche lorsqu’un job est interrompu. L’événement WorkerStopping transporte désormais le nom de la connexion et de la file lorsqu’un worker est tué, ce qui facilite la supervision des workers en production.
use Illuminate\Support\Facades\Queue;
use Illuminate\Queue\Events\JobInterrupted;
use Illuminate\Support\Facades\Event;
// Nouveau en 13.31 : lire la taille d'une file
$taille = Queue::totalSize('default');
// Reagir a l'interruption d'un job
Event::listen(function (JobInterrupted $event) {
logger()->warning('Job interrompu', [
'connexion' => $event->connectionName ?? null,
]);
});Eloquent, requêtes paresseuses et client HTTP
Côté ORM, le support du chaperone arrive sur les modèles pivot des relations BelongsToMany : les modèles chargés depuis une table pivot conservent leur relation parente sans requête supplémentaire, ce qui évite le problème classique du N+1. La portée de la fermeture passée à wherePivot() a par ailleurs été corrigée.
Deux régressions de fond disparaissent. Les méthodes lazy() et lazyById() respectent maintenant limit() et offset(), alors qu’elles les ignoraient jusque-là. Le client HTTP voit une fuite mémoire corrigée, et le middleware RateLimited bloque désormais réellement les jobs qui atteignent la limite.
Un numéro de version mineur peut transporter un correctif de sécurité : la montée de version n’est pas une opération cosmétique.
Mettre à jour : ce qu’il faut vérifier
La 13.31 reste dans la branche 13.x : la mise à jour se fait par composer update, sans passage de version majeure. Le tableau ci-dessous résume les changements à connaître avant de déployer.
| Domaine | Changement | À vérifier |
|---|---|---|
| Sécurité | Vérification du hash dans le cookie recaller | Rétroporté en 12.x : appliquer aussi sur les projets non migrés |
| Files d’attente | Pilote Redis « cluster-safe », totalSize(), JobInterrupted | Tester les workers sur un cluster Redis avant la production |
| Eloquent | lazy()/lazyById() respectent limit()/offset() | Relire le code qui comptait sur l’ancien comportement |
| Sessions | ArraySessionHandler::create_sid() pour la conformité PHP 9.0 | Sans impact immédiat, anticipe la compatibilité future |
Les projets encore en 12.x reçoivent le même correctif de sécurité, rétroporté. La mise à jour n’attend donc pas une migration vers la 13.x : un simple composer update sur la contrainte 12.x suffit à récupérer le patch.
Cette livraison s’inscrit dans le rythme régulier de la branche, après la 13.30 et ses index vectoriels, et dans la lignée des décisions récentes du projet, comme la fermeture des issues GitHub sur ses paquets.
Ce qu’il faut retenir
Laravel 13.31.0 est une version d’entretien à la fois banale et importante : banale par son format, importante par son correctif de sécurité sur l’authentification par cookie et par la fiabilisation des files Redis en cluster. Les équipes qui utilisent « se souvenir de moi » ou des workers distribués devraient la déployer sans attendre, en testant les files sur un environnement de préproduction.
Sur mes projets, je traite les versions mineures de Laravel comme des correctifs de sécurité potentiels, jamais comme de simples options : je lis le changelog, je cible d’abord les entrées « Security » et « Authentication », puis je déroule la mise à jour en préproduction. La 13.31 confirme cette habitude — le patch du cookie recaller est exactement le genre de détail qu’on ne voit pas passer si l’on saute les versions mineures. — Simon Janvier
Pour aller plus loin : les notes de version complètes de Laravel 13.31.0 sur GitHub.
