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



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

675   22  

22 ответов:

эта проблема возникает из проверки токена CSRF, которая не выполняется. Поэтому либо вы не публикуете его, либо вы публикуете неправильный.

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

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

{{ csrf_field() }}

или исключить свой маршрут (не рекомендуется из-за безопасности) в app/Http/Middleware/VerifyCsrfToken.php:

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

в моем случае, я получил то же сообщение об ошибке, а затем понял, что я пропустил, чтобы добавить 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>

каждый раз, когда вы определяете 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

убедитесь, что ваш конфиг/сеанс.php-файл содержит строку

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

затем удалить SESSION_DOMAIN строку в ваш .env file

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

место {{csrf_field()}} в своем form tag

enter image description here

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

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

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

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

<input type = "hidden" name = "_token" value = "<?php echo csrf_token() ?>" />

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

SESSION_DRIVER=yourwebsite.com

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

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

проблема, с которой я столкнулся, была вызвана обновлением с laravel 5.0 до 5.5 и забыла обновить конфигурацию/сеанс.php

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

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

  1. php artisan cache: clear
  2. php artisan config: clear
  3. php artisan маршрут: очистить
  4. php artisan view: clear

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

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

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

<input type="hidden" name="_token" value="{{ Session::token() }}">

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

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

у нас он работает путем копирования маршрутов из маршрутизатора.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');

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

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

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

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

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

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

larvel_fix_error.png

просто добавить @csrf внутри тега form.

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

  1. это может быть токен csrf, которого нет в вашей форме. Вы должны использовать @crsf или {{ csrf_field() }}

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

    php artisan cache: clear

    php artisan view: clear

    php artisan cache: clear

    и очистить кэш браузера.

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

php artisan key: generate

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

 echo '<input type = "hidden" name = "_token" value = "'. csrf_token().'" >';

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

Comments

    Ничего не найдено.