veilletech.fr
29 oct. Feed du jour
#06 LARAVEL Article

Laravel 13.39 : purge des sessions planifiée

Un cache vide mis en mémoire par OPcache, ça ne se répare pas tout seul.

Laravel 13.39.0 ajoute la commande session:garbage-collect, qui permet de planifier la purge des sessions expirées au lieu de la confier à une requête tirée au sort. La même version rend atomique l'écriture des caches de configuration, de routes et d'événements : une requête concurrente pouvait lire un fichier vide, que OPcache gardait ensuite en mémoire.

3 min de lectureintermédiairevidéo 1:27
Partager
Sommaire5 sections
  1. Ce qui se passe
  2. Sortir la purge de sessions du chemin des requêtes
  3. Le correctif à prendre en premier
  4. Les autres ajouts utiles
  5. À retenir

Ce qui se passe

Laravel 13.39.0 ajoute une commande Artisan session:garbage-collect, un moyen de désactiver la clé primaire d'un modèle, la durée des jobs sur l'événement JobAttempted, et plusieurs correctifs d'infrastructure.

Sortir la purge de sessions du chemin des requêtes

Par défaut, Laravel nettoie les sessions expirées sur une requête tirée au hasard, selon le réglage lottery de config/session.php. C'est donc un visiteur qui paie le nettoyage.

PHP
use Illuminate\Support\Facades\Schedule;

Schedule::command('session:garbage-collect')->hourly();

La commande se fie à votre valeur session.lifetime pour décider ce qui est expiré. Pour que les requêtes arrêtent de s'en charger, passez la loterie à [0, 100]. Contribution d'Andrew Brown, PR #62104 et #62150.

Le correctif à prendre en premier

config:cache, route:cache et event:cache écrivent maintenant dans un fichier temporaire, puis le renomment. Avant, une requête qui démarrait pendant l'exécution de la commande pouvait lire un fichier de cache vide. Et avec opcache.validate_timestamps=0, OPcache conservait ce fichier vide : toutes les requêtes échouaient jusqu'au redémarrage de PHP-FPM. PR #62117.

Si votre production tourne sous OPcache avec les timestamps désactivés, c'est la raison de prendre cette version.

Les autres ajouts utiles

PHP
#[Table(name: 'activity_log', key: false)]
class Activity extends Model {}

Un correctif de suivi marque aussi ces modèles comme non incrémentaux, si bien que create() ne lève plus d'erreur après l'insertion. PR #62113 (Caleb White) et #62205.

PHP
// avant
'photos' => [Rule::required(), Rule::array(), 'min:1'],
// après
'photos' => [Rule::required(), Rule::array()->min(1)->max(10)],

Elles fonctionnent aussi avec des clés autorisées : Rule::array(['a', 'b'])->min(1) produit array:a,b|min:1. PR #62179.

Source : Laravel News, 28 octobre 2026. Source en anglais.