laravel 5.5 Срок действия страницы истек из-за неактивности. Пожалуйста, обновите и повторите попытку


Я новичок в Laravel, и у меня есть проблема, которую я не понимаю. У меня есть форма журнала в моем проекте, и мой метод - POST. Когда я пытаюсь выполнить запрос, результат таков: "Срок действия страницы истек из-за бездействия. Пожалуйста, обновите и повторите попытку"., но если я изменю метод, чтобы получить, он будет работать нормально. Может кто-нибудь сказать мне, почему это так и как это исправить, потому что, конечно, мне нужен метод post.

 51
Author: Svetlozar, 2017-09-11

22 answers

Эта проблема возникает из-за сбоя проверки токена CSRF. Так что либо вы его не публикуете, либо публикуете неверный.

Причина, по которой это работает для GET, заключается в том, что для маршрута GET в Laravel не размещен токен CSRF.

Вы можете либо разместить токен CSRF в своей форме, позвонив по телефону:

{{ csrf_field() }}

Или исключите свой маршрут (НЕ РЕКОМЕНДУЕТСЯ ИЗ-ЗА БЕЗОПАСНОСТИ) в app/Http/Middleware/VerifyCsrfToken.php:

protected $except = [
    'your/route'
];
 141
Author: Erik Baars, 2018-08-06 11:41:53

В моем случае я получил то же сообщение об ошибке, а затем понял, что пропустил добавление csrf_token для поля формы. Затем добавьте csrf_token.

Используя помощник формы, который будет,

{{ csrf_field() }}

Или без помощника по форме, который будет,

<input type="hidden" name="_token" value="{{ csrf_token() }}">

Если это не сработает, то -

Обновите кэш браузера

И теперь это может сработать, спасибо.

Обновление Для Laravel 5.6

Laravel интегрирует новый @csrf вместо {{ csrf_field() }}. Тот теперь выглядит более привлекательно.

<form action="">
   @csrf
   ...
</form>
 27
Author: Maniruzzaman Akash, 2018-06-04 15:57:56

Всякий раз, когда вы определяете HTML-форму в своем приложении, вы должны включать скрытое поле маркера CSRF в форму, чтобы промежуточное программное обеспечение защиты CSRF могло проверить запрос. Вы можете использовать помощник csrf_field для создания поля токена:

<form method="POST" action="/profile">
    {{ csrf_field() }}
    ...
</form>

Это не работает, затем обновите кэш браузера, и теперь это может сработать,

Для получения более подробной информации откройте ссылку:- Защита CSRF в Laravel 5.5

ОБНОВЛЕНИЕ:

С Laravel 5.6 с использованием лезвий шаблоны, это довольно просто.

<form method="POST" action="/profile">
    @csrf
    ...
</form>

Для получения более подробной информации откройте ссылку:- Защита CSRF в Laravel 5.6

 6
Author: Udhav Sarvaiya, 2018-08-22 05:55:23

Убедитесь, что ваш config/session.php файл содержит эту строку

'domain' => env('SESSION_DOMAIN', null),

Затем удалите строку SESSION_DOMAIN в файле .env

 3
Author: Youssouf Cherif, 2018-02-22 23:13:38

У меня была та же проблема. используйте "очистить данные просмотра" в Chrome. может быть, решите вашу проблему.

 2
Author: Sayed Mohammad Amin Emrani, 2017-10-04 18:54:12

Поместите {{csrf_field()}} В свой тег form

enter image description here

 2
Author: Wael Assaf, 2018-04-25 13:20:25

Это происходит потому, что вы используете промежуточное ПО CSRV по умолчанию из установки Laravel. Чтобы решить эту проблему, удалите эту строку из вашего Kernel.php :

\App\Http\Middleware\VerifyCsrfToken::class,

Это нормально, если вы создаете API. Однако, если вы создаете веб-сайт, это проверка безопасности, поэтому будьте осведомлены о ее рисках.

 1
Author: José Ricardo Júnior, 2017-11-01 19:23:00

Просто поместите этот код в форму

<input type = "hidden" name = "_token" value = "<?php echo csrf_token() ?>" />
 1
Author: Manu Joseph, 2017-12-21 09:19:42

Я столкнулся с той же ошибкой, поэтому я просто удалил эту строку из своего файла .env

SESSION_DRIVER=yourwebsite.com

 1
Author: Akash Sethi, 2018-03-23 17:30:42

Если у вас задана конфигурация: SESSION_DRIVER=файл, вы должны проверить, доступен ли каталог сеанса для записи. Проверьте хранилище/структуру/сеанс

 1
Author: Pawel Kolodziejuk, 2018-04-18 09:00:21

В течение нескольких недель безуспешно пробовал различные решения этой проблемы.

Проблема, с которой я столкнулся, была вызвана обновлением с laravel 5.0 до 5.5 и я забыл обновить config/session.php

Если кто-то столкнулся с проблемой, попробуйте обновить config/session.php чтобы соответствовать версии на Laravel, которую вы используете

 1
Author: Rayton Kiwelu, 2018-04-29 08:49:45

Если вы уже включили маркер CSRF в свою форму. Затем вы получаете страницу с ошибкой, возможно, из-за данных кэша в вашей форме. Откройте терминал/командную строку и запустите эти команды в корневом каталоге проекта.

  1. кэш php artisan: очистить
  2. конфигурация php artisan: очистить
  3. маршрут php-ремесленника: очистить
  4. представление php-мастера: очистить

Также попробуйте очистить кэш браузера вместе с выполнением этих команд.

 1
Author: Aneeqa Chowdhury, 2018-08-05 15:03:12

В моем случае та же проблема была вызвана тем, что я забыл добавить > в конце моего скрытого поля ввода, вот так: <input type="hidden" name="_token" value="{{ Session::token() }}"

Итак, я исправил это, добавив:

<input type="hidden" name="_token" value="{{ Session::token() }}">
 0
Author: Kaloyan Drenski, 2017-11-14 07:47:15

Забавно, но для меня это работает. я понял, что это вызвано из-за HTML-ТЕГА по умолчанию в коде laravel. Используйте /**/ или {{----}} вместо

Или попробуйте удалить недавний Html-комментарий в вашем коде... Или измените Html-комментарий на Php-комментарий... Или попробуйте запустить любую команду Worng artisan, такую как php artisan clean browser, И посмотрите, выводит ли она какие-либо данные с комментариями HTML вместе с ошибкой...

 0
Author: samtax01, 2017-11-26 13:07:50

Мы заставили его работать, скопировав маршруты из Router.php вместо использования Auth::routes(), вам нужны следующие маршруты:

Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');

// Registration Routes...
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
Route::post('register', 'Auth\RegisterController@register');

// Password Reset Routes...
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset');
 0
Author: Notflip, 2018-01-17 10:06:25

В моем случае я добавил ob_start(); в верхней части моего index.php на сервере, и все, кажется, работает нормально.

 0
Author: Ayan Mohammad, 2018-04-05 06:52:45

Я знаю, что на этот вопрос был дан удовлетворительный ответ, но я хотел упомянуть исправление, которое сработало в моем случае. Я добавил {{ csrf_field() }}, но это все равно не сработало.

Затем я вспомнил, что заблокировал все файлы cookie в целях разработки, что может быть полезно, когда вы меняете страницу и хотите ее обновить.

Как только я изменил настройки, чтобы перестать блокировать все файлы cookie в MS Edge browser, проблема исчезла.

 0
Author: ghostcoder23x, 2018-04-28 03:43:02

Моя проблема решена простым добавлением @csrf в тег формы

Laravel 5.6 не поддерживает {{ csrf_field() }} просто добавьте @csrf вместо {{ csrf_field() }}

Larvel_fix_error.png - ошибка.

 0
Author: mysticmeelone, 2018-06-27 06:34:20

Просто добавьте @csrf внутри тега формы.

Или вы можете включить csrf_token в заголовок, чтобы отправлять его с каждым запросом.

 0
Author: Shaz, 2018-09-26 12:09:44
  1. Это может быть токен csrf, которого нет в вашей форме. Вы должны использовать @crsf или {{ csrf_field() }}

  2. Если вы используете csrf в своей форме. Это может быть кэш. Очистите кэш вашего приложения.

    Кэш Php artisan: очистить

    Представление Php-мастера: очистить

    Кэш Php artisan: очистить

    И очистите кэш вашего браузера.

    1. Если ошибки снова появятся, создайте новый ключ

Ключ Php-мастера: сгенерировать

 0
Author: Turan Zamanlı, 2018-10-04 12:41:55

Все еще у кого есть эта проблема, используйте следующий код в своей форме, как показано ниже.

 echo '<input type = "hidden" name = "_token" value = "'. csrf_token().'" >';
 -1
Author: Sineth Lakshitha, 2018-05-21 11:26:46

Войдите в App/Kernel.php и комментарий \App\Http\Middleware\VerifyCsrfToken::class.

 -3
Author: Aarif, 2018-07-27 19:07:38