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.

1voto

Anar Bayramov Points 4709

Par défaut, je n'ai pas eu ce problème. Donc ce que j'ai fait est chmod -R 644 sessions pour reproduire le problème.

enter image description here

Ensuite, j'ai donné des permissions au dossier des sessions en chmod -R 755 sessions

maintenant mon code de projet fonctionne à nouveau.

enter image description here

La raison pour laquelle cela arrive est que vous stockez votre cache dans un fichier avec un manque d'écriture. d'écriture.

Le fichier de configuration de la session est stocké à l'adresse config/session.php. Soyez d'examiner les options disponibles dans ce fichier. Par défaut, Laravel est configuré pour utiliser le pilote de session fichier, ce qui fonctionnera bien pour de nombreuses applications. Dans les applications de production, vous pouvez applications de production, vous pouvez envisager d'utiliser les pilotes memcached ou redis pour des performances.

Solutions :

1 - Comme je l'ai indiqué ci-dessus, vous pouvez donner la permission 755 au dossier sessions. 2 - Vous pouvez utiliser une autre configuration du pilote de session.

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. base de données - les sessions sont stockées dans une base de données relationnelle. memcached / redis - les sessions sont sont stockées dans l'un de ces magasins rapides, basés sur une mémoire cache. array - les sessions sont sont stockées dans un tableau PHP et ne sont pas persistantes.

Gardez à l'esprit que si vous voulez utiliser memcached/redis, vous devez les avoir installés sur votre serveur ou votre conteneur docker redis doit être en cours d'exécution.

1voto

Towelie Points 59

Si vous avez déjà le csrf vous avez peut-être modifié le mode d'exécution des sessions.

En config/session.php vérifiez le "sécurisé". champ. Il doit être sur false si https n'est pas disponible sur votre serveur.

Vous pouvez également mettre SESSION_SECURE_COOKIE=FALSE sur votre .env (répertoire racine).

1voto

Biblbroks42 Points 300

Ouvrez la ligne de commande cmd sur votre projet.

1.commande

php artisan config:cache

2.comand

php artisan route:clear

1voto

iranimij Points 61

Avez-vous également le csrf dans l'en-tête de votre application ?

<meta name="csrf-token" content="{{ csrf_token() }}">

1voto

avinashkrc Points 61

J'ai essayé toutes les réponses fournies ici. Cependant, aucune d'entre elles n'a fonctionné pour moi en hébergement partagé. Cependant, la solution mentionnée ici fonctionne pour moi Comment résoudre le problème "CSRF Token Mismatch" dans Laravel ? l

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