111 votes

Post request in Laravel - Erreur - 419 Désolé, votre session/ 419 votre page a expiré

J'ai installé Laravel 5.7

Ajout d'un formulaire dans le fichier \resources\views\welcome.blade.php

<form method="POST" action="/foo" >
    @csrf
    <input type="text" name="name"/><br/>
    <input type="submit" value="Add"/>
</form>

Ajouté au dossier \routes\web.php

Route::post('/foo', function () {
    echo 1;
    return;
});

Après avoir envoyé une requête POST :

419 Désolé, votre session a expiré. Veuillez rafraîchir et réessayer.

En version 5.6 il n'y avait pas de tel problème.

0 votes

Avez-vous essayé d'ajouter une redirection ? Au lieu de return; vous pouvez appeler return 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 para SESSION_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.

162voto

Shobi Points 3534

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

42voto

David Points 562

C'est parce que le formulaire nécessite un csrf. Dans la version 5.7, ils l'ont changé en @csrf

<form action="" method="post">
    @csrf
    ...

Referene : https://laravel.com/docs/5.7/csrf

6 votes

Son formulaire comprend un jeton csrf. Je ne sais pas s'il l'a modifié plus tard ou non.

0 votes

Ouais, sa forme originale a un csrf champ, je viens de regarder l'historique des modifications

0 votes

Cela ne résout pas le problème dans mon cas aussi, car je l'ai toujours dans mon formulaire, mais j'ai commencé à faire face à l'erreur en raison de certains autres changements.

18voto

Saurabh Mistry Points 3325

cas 1 : si vous exécutez le projet dans votre système local comme 127.0.01:8000 ,

puis

ajouter SESSION_DOMAIN= dans votre fichier .env

ou dans votre config/session.php 'domain' => env('SESSION_DOMAIN', ''),

et ensuite exécuter php artisan cache:clear

cas 2 : si le projet est exécuté sur un serveur et que vous avez un domaine tel que "mondomaine.com"

ajouter SESSION_DOMAIN=mydomain.com dans votre fichier .env

ou dans votre config/session.php 'domain' => env('SESSION_DOMAIN', 'mydomain.com'),

et ensuite exécuter php artisan cache:clear

9voto

Bonish Koirala Points 565

Que diriez-vous d'utiliser

{{ csrf_field() }} au lieu de @csrf

L'erreur 419 est principalement due à des problèmes de jeton csrf.

0 votes

Vous voulez dire {{ csrf_field() }} ?

0 votes

Il génère le même html que @csrf, donc même résultat.

8voto

Karim Samir Points 115

J'utilise Laravel 5.7 J'ai eu le même problème et c'était parce que le jeton csrf n'était pas dans le formulaire, alors en ajoutant

@csrf

a fixé le problème

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X