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.

8voto

Prasna Lukito Points 89

Essayez de commenter \App\Http\Middleware\EncryptCookies::class en \app\Http\Kernel.php J'ai un problème similaire et je l'ai résolu en procédant ainsi. Ce n'est probablement pas la meilleure solution en raison de la sécurité, mais au moins cela a fonctionné.

Auparavant, j'ai essayé :

  • Effacer le cache
  • Générer une nouvelle clé d'application
  • Exécuter mon application dans différents navigateurs (Chrome 70, Mozilla Firefox 57 et IE 11).
  • Exécuter mon application sur un autre ordinateur
  • Commentaire \App\Http\Middleware\VerifyCsrfToken::class en \app\Http\Kernel.php
  • Commentaire \Illuminate\Session\Middleware\AuthenticateSession::class en \app\Http\Kernel.php
  • Mise à niveau et rétrogradation de Laravel (entre 5.6 et 5.7)

Mais aucune de ces solutions n'a fonctionné pour moi.

EDITAR

Dans mon cas, chaque fois que je me connecte, un nouveau fichier de session est créé (l'ancien fichier persiste, mais il est soudainement oublié). Vérifiez storage/framework/sessions ) et un nouveau jeton CSRF est généré. Le problème ne vient donc pas de VerifyCsrfToken.

Comme @Vladd l'a mentionné dans la section des commentaires, vous devez jamais commentaire \App\Http\Middleware\VerifyCsrfToken::class . Vous devez vérifier que vous avez envoyé le bon CSRF TOKEN au serveur.

8voto

Bram Janssen Points 513

Il pourrait s'agir d'un problème avec votre session. Après avoir joué avec ces paramètres, j'ai résolu mon problème. Pour moi, cela s'est avéré être la dernière option.

  • Si vous utilisez "file" comme pilote de session, regardez dans storage/framework/sessions si les sessions sont sauvegardées après un rafraîchissement. Si ce n'est pas le cas, c'est probablement dû à des permissions incorrectes. Vérifiez que votre stockage/répertoire a les droits corrects.
  • Essayez de désactiver tout le Javascript dans vos pages (soit en désactivant via le navigateur ou à l'intérieur du code) et assurez-vous que 'http_only' = => true,
  • Essayez d'utiliser avec et sans https
  • Assurez-vous que la variable SESSION_DRIVER n'est PAS nulle.
  • Essayez de basculer entre 'encrypt' => false, et 'encrypt' => true,
  • Essayez de changer le nom du cookie 'cookie' => 'laravelsession',
  • Essayez de définir votre SESSION_DOMAIN sur votre domaine réel OU sur null.
  • Essayez de basculer entre 'secure' => env('SESSION_SECURE_COOKIE', false), et 'secure' => env('SESSION_SECURE_COOKIE', true),

Source : La session Laravel change toujours à chaque rafraîchissement / requête dans Laravel 5.4

6voto

Aghnat Atqiya Points 195

Changer votre @csrf dans welcome.blade.php en <input type="hidden" name="_token" value="{{ csrf_token() }}">

donc votre code ressemble à ceci :

<form method="POST" action="/foo" >
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <input type="text" name="name"/><br/>
    <input type="submit" value="Add"/>

   <button type="submit">Submit</button>
</form>

6voto

hosein azimi Points 111

Pour résoudre cette erreur, vous devez d'abord insérer l'une des commandes suivantes dans la balise du formulaire.

@csrf OU {{ csrf_field }}

Si votre problème n'est pas résolu, procédez comme suit : (Notez que l'une des commandes ci-dessus doit se trouver dans la balise form)

Insérez l'une des commandes suivantes dans la balise de formulaire @csrf OU {{ csrf_field }}

Ouvrez le fichier .env et modifiez les valeurs du "fichier" dans la section SESSION_DRIVER.

Ensuite, vous devez réinitialiser le cache de Laravel en tapant les commandes suivantes dans le terminal.

php artisan view:clear php artisan route:clear php artisan cache:clear

php artisan config:cache

4. dans la dernière étape, débranchez le projet du serveur et cliquez à nouveau sur php artisan serve.

J'espère que votre problème est résolu

6voto

Kamaro Lambert Points 545

Cela devrait fonctionner si vous essayez toutes ces étapes :

  1. Assurez-vous que votre session est bien configurée, le moyen le plus simple est d'en faire un fichier et de vous assurer que le dossier de stockage a la permission chmod 755 puis dans votre .env vous le définissez comme ci-dessous, le pilote de session de fichier est la manière la plus simple de le définir.

    SESSION_DRIVER=file
    SESSION_DOMAIN=
    SESSION_SECURE_COOKIE=false
  2. Assurez-vous que le dossier Cache est vidé et accessible en écriture, vous pouvez le faire en exécutant la commande artisanale ci-dessous.

    php artisan cache:clear
  3. Assurez-vous que les permissions des dossiers sont bien définies, elles doivent être configurées comme ci-dessous :

    sudo chmod -R 755 storage
    sudo chmod -R 755 vendor
    sudo chmod -R 644 bootstrap/cache
  4. Assurez-vous que votre formulaire comporte @csrf jeton inclus.

J'espère que cela résoudra votre 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