Avant de lire ci-dessous, assurez-vous que vous avez @csrf
ou {{ csrf_field() }}
dans votre formulaire
comme
<form method="post">
@csrf <!-- {{ csrf_field() }} -->
... rest of form ...
</form>
Le message d'erreur Session expirée ou 419 pages expirées dans larvel s'affiche parce que quelque part votre vérification de jeton csrf échoue, ce qui signifie que le App\Http\Middleware\VerifyCsrfToken::class
middleware est déjà activé. Dans le formulaire, la @csrf
directive sur les lames est déjà ajoutée, ce qui devrait également convenir.
Ensuite, l'autre domaine à vérifier est la session. La csrf
vérification du jeton est directement impliquée dans votre session.Vous voudrez peut-être vérifier si votre pilote de session fonctionne ou non, par exemple un Redis mal configuré peut causer un problème.
Peut-être que vous pouvez essayer de changer votre pilote / logiciel de session à partir de votre .env
fichier, les pilotes pris en charge sont indiqués ci-dessous
Pilotes de session pris en charge dans Laravel 5, Laravel 6 et Laravel 7 (Doc Link)
file
- les sessions sont stockées dans stockage / framework / sessions.
cookie
- les sessions sont stockées dans des cookies sécurisés et cryptés.
database
- les sessions sont stockées dans une base de données relationnelle.
memcached
/ redis
- les sessions sont stockées dans l'un de ces magasins rapides basés sur le cache.
array
- les sessions sont stockées dans un tableau PHP et ne seront pas persistantes.
Si votre formulaire fonctionne après le changement de pilote de session, alors quelque chose ne va pas avec ce pilote particulier, essayez de corriger l'erreur à partir de là.
Scénarios possibles sujets aux erreurs
Il est probable que les sessions basées sur des fichiers ne fonctionnent pas à cause des problèmes d'autorisation avec le /storage
répertoire (une recherche rapide sur Google vous cherchera la solution), rappelez-vous également que mettre 777 pour le répertoire n'est jamais la solution.
Dans le cas du pilote de base de données, votre connexion à la base de données peut être erronée, ou la sessions
table peut ne pas exister ou mal configurée (la mauvaise partie de configuration a été confirmée comme étant un problème selon le commentaire de @Junaid Qadir).
redis/memcached
La configuration est erronée ou est manipulée par un autre morceau de code dans le système en même temps.
Il peut être judicieux d'exécuter php artisan key:generate
et de générer une nouvelle clé d'application qui, à son tour, videra les données de session.
Effacer le cache du navigateur HARD , j'ai trouvé que Chrome et Firefox étaient plus coupables que je ne m'en souvienne.
En savoir plus sur l'importance des clés d'application
return;
vous pouvez appelerreturn redirect()->back();
. D'après ce que je peux voir, l'application n'a rien à faire après la demande de publication. Vous pouvez peut-être le rediriger vers une vue après avoir traité la demande.