Avant de lire ce qui suit, assurez-vous que vous avez @csrf
o {{ csrf_field() }}
dans votre formulaire comme
<form method="post">
@csrf <!-- {{ csrf_field() }} -->
... rest of form ...
</form>
Le message d'erreur Session expirée ou Page expirée 419 dans Laravel apparaît parce que la vérification de votre jeton csrf a échoué quelque part, ce qui signifie que le message d'erreur Session expirée ou Page expirée 419 dans Laravel a échoué. App\Http\Middleware\VerifyCsrfToken::class
Le middleware est déjà activé. Dans le formulaire @csrf
La directive blade est déjà ajoutée, ce qui devrait également convenir.
L'autre point à vérifier est la session. Le site csrf
La vérification des jetons est directement liée à votre session. Vous pouvez donc vérifier si votre pilote de session fonctionne ou non, par exemple si un Redis mal configuré peut causer un problème.
Vous pouvez peut-être essayer de changer de pilote/logiciel de session depuis votre ordinateur. .env
les pilotes pris en charge sont indiqués ci-dessous
Pilotes de session pris en charge dans Laravel 5, Laravel 6 et Laravel 7 (Lien Doc)
-
file
- Les sessions sont stockées dans storage/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
- sont stockées dans un tableau PHP et ne seront pas conservées.
Si votre formulaire fonctionne après avoir changé de pilote de session, c'est qu'il y a un problème avec ce pilote particulier, essayez de corriger l'erreur à partir de là.
Scénarios susceptibles d'entraîner des erreurs
-
Il est probable que les sessions basées sur des fichiers ne fonctionnent pas en raison des problèmes d'autorisation avec le fichier /storage
(une rapide recherche sur Google vous permettra de trouver 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, il se peut que votre connexion à la base de données soit incorrecte, ou que le pilote de base de données ne fonctionne pas correctement. sessions
peut ne pas exister ou être mal configuré (la partie de configuration incorrecte a été confirmée comme étant un problème selon le commentaire de @Junaid Qadir).
-
redis/memcached
est erronée ou est manipulée par un autre morceau de code dans le système au même moment.
Cela pourrait être une bonne idée d'exécuter php artisan key:generate
et générer une nouvelle clé d'application qui, à son tour, effacera les données de la session.
Effacer le cache du navigateur HARD J'ai constaté que Chrome et Firefox étaient des coupables plus souvent que je ne peux m'en souvenir.
En savoir plus sur l'importance des clés d'application
0 votes
Avez-vous essayé d'ajouter une redirection ? Au lieu de
return;
vous pouvez appelerreturn redirect()->back();
. D'après ce que je vois, l'application n'a rien à faire après la requête post. Peut-être pouvez-vous la rediriger vers une vue après avoir traité la requête.1 votes
J'ai le même problème. Lorsque je passe à la session de base de données, cela se produit et lorsque je repasse à la session de base de données, cela se produit.
file
paraSESSION_DRIVER
en.env
il fonctionne bien. Pourquoi la session basée sur la base de données ne fonctionne-t-elle pas ?0 votes
J'ai copié votre code exact dans une nouvelle installation de Laravel 5.7. Cela a fonctionné. Il y a un problème ailleurs.
0 votes
Ce problème à cause du problème des jetons. J'ai essayé d'exécuter le même code comme ceci, mais je n'ai pas eu d'erreur. Vous devriez donner plus d'informations comme votre pilote de session, la valeur du _token affiché dans le formulaire. En outre, vous pouvez déboguer vous-même dans ce fichier
vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php
ligne 67 pour savoir pourquoi1 votes
J'ai réalisé que j'avais utilisé
sessions
table dans un but différent. Après avoir changé le nom de cette table pour un nom plus approprié et exécutéartisan session:table
et rafraîchi la migration tout fonctionne bien0 votes
J'ai testé votre code et je n'ai trouvé aucun problème. Il n'y a pas de message d'avertissement et les échos sont exacts. J'utilise également laravel 5.7.
0 votes
Les sessions sont censées expirer, donc juste pour vérifier la question évidente - combien de temps le formulaire était-il ouvert avant que vous le soumettiez ? Quelle est la valeur de
lifetime
enconfig/session.php
?0 votes
Puisque l'auteur de l'OP n'est pas intervenu pour dire ce qui a résolu son problème. Je vois beaucoup de solutions ici qui n'ont pas résolu le problème que j'avais. Je l'ai résolu différemment, donc aucune réponse n'est correcte, je suppose. Elles peuvent toutes être correctes dans des scénarios différents. C'est pourquoi je maintiens mon offre de prime.
0 votes
Vous pouvez ajouter une réponse qui a résolu votre problème à moins qu'elle ne soit référencée dans une réponse ici (parce qu'elle n'a pas de sens). Et selon la réponse qui vous a le plus plu/la plus appropriée pour les futurs PO, vous pouvez attribuer la prime, car vous ne pouvez en aucun cas récupérer les points de prime.
0 votes
si vous devez exclure votre route de réponse de la protection CSRF.
0 votes
stackoverflow.com/questions/37806762/