116 votes

"La page a expiré pour cause d'inactivité" - Laravel 5.5

Ma page d'enregistrement affiche correctement le formulaire avec le CsrfToken ( {{ csrf_field() }} ) présents dans le formulaire).

Formulaire HTML

<form class="form-horizontal registration-form" novalidate method="POST" action="{{ route('register') }}">
        {{ csrf_field() }}
        ....
</form>

J'utilise l'authentification intégrée pour les utilisateurs. Je n'ai rien changé, sauf les routes et les redirections.

Lorsque je soumets le formulaire (juste après l'avoir rechargé également), cela donne que La page a expiré pour cause d'inactivité. Veuillez rafraîchir et réessayer. erreur.

Il me manque peut-être une toute petite chose. Mais je ne suis pas sûr de ce que c'est. Vous pouvez m'aider ?

Mise à jour

J'ai trouvé le problème. Le pilote de session était défini sur array. Je l'ai changé en file et l'erreur a disparu. Mais quel est le problème si j'utilise array ?

0 votes

Cela peut avoir un rapport avec le fait que le chemin de stockage n'est pas accessible en écriture. C'est là que sont stockées les données de session concernant les jetons si vous utilisez des sessions basées sur des fichiers.

1 votes

J'ai trouvé le problème. Le pilote de session était réglé sur array . Je l'ai remplacé par file et l'erreur a disparu. Mais quel est le problème si j'utilise array ?

0 votes

Ou cette vérification url stackoverflow.com/questions/39997180/

171voto

Devon Points 1551

Si vous arrivez à cette réponse directement depuis une recherche assurez-vous que vous avez déjà ajouté le jeton csrf à votre formulaire avec {{ csrf_field() }} comme l'OP.


Si votre pilote de session est réglé sur fichier :

Cela peut avoir un rapport avec le fait que le chemin de stockage n'est pas accessible en écriture. C'est là que sont stockées les données de session concernant les jetons si vous utilisez des sessions basées sur des fichiers. Cela peut être vérifié avec is_writable(config('session.files'))


Pour l'OP, le pilote de session était réglé sur array. Le tableau est destiné à être testé uniquement. Comme les données ne sont pas persistantes, il ne sera pas possible de comparer le jeton lors de la prochaine requête.

Le pilote de tableau est utilisé lors des tests et empêche les données stockées dans la session ne soient persistées.

https://laravel.com/docs/5.5/session#configuration


Vérifiez config/session.php

Enfin, un problème que je viens de rencontrer, nous avions un projet qui avait le domaine de session et les paramètres sécurisés dans config/session.php mais le site de développement n'utilisait pas HTTPS (SSL/TLS). Cela a provoqué cette erreur générique puisque sessions.secure était défini sur true par défaut.

3 votes

Ok. Mais pour l'instant, il est en cours de développement. Donc si j'utilise un tableau, pourquoi est-ce que ça me donne cette erreur ?

0 votes

@SougataBose Les tests ne sont pas du développement. Les données des tableaux ne sont pas persistantes...

0 votes

C'est la raison pour laquelle on devrait passer par les DOC correctement.. :)

81voto

Hayder Abbass Points 452

J'ai rencontré le même problème dans Laravel 5.5. Dans mon cas, cela s'est produit après avoir changé une route de GET à POST. Le problème était dû au fait que j'avais oublié de passer un jeton CSRF lorsque je suis passé à POST.

Vous pouvez soit afficher un jeton CSRF dans votre formulaire en appelant :

 {{ csrf_field() }}

Ou exclure votre route dans app/Http/Middleware/VerifyCsrfToken.php

 protected $except = [
        'your/route'
    ];

2 votes

csrf_field() présent dans le formulaire. La réponse acceptée décrit le problème. Merci.

1 votes

Dans mon cas, je recevais un POST d'une tierce partie, donc l'ajout de csrf_field() n'était pas une option. Comme CSRF n'était pas un facteur dans mon cas, l'ajout d'une exception à cette route a résolu le problème. Merci.

0 votes

Mon problème n'a pas été résolu. J'ai vraiment fait l'essentiel. Mais j'utilise des fournisseurs et des services personnalisés. Il n'y a pas de problème lorsque j'appelle une méthode de contrôleur mais lorsque j'exécute une méthode de service dans un contrôleur qui a été appelé avec une requête post, le problème apparaît !

12voto

Sagar Chamling Points 532

Essayez-les tous.

composer dump-autoload
php artisan optimize
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

0 votes

Au lieu d'essayer toutes les commandes ci-dessus, utilisez ce paquetage github.com/afrazahmmad/clear-all-cached-data

8voto

yuklia Points 735

Ceci est dû à Illuminate\Session\TokenMismatchException Regardez cet exemple de code pour savoir comment le gérer correctement :

https://gist.github.com/jrmadsen67/bd0f9ad0ef1ed6bb594e

6voto

Andrés Ruiz Points 41

Mon cas a été résolu avec SESSION_DOMAIN Dans mon ordinateur local, il fallait que la valeur de l'adresse soit la suivante xxx.localhost . Cela causait des conflits avec la production SESSION_DOMAIN , xxx.com qui a été défini directement dans le fichier de configuration session.php.

0 votes

Quel pilote de session utilisiez-vous ? file o cookie ?

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