laravel 5.5 срок действия страницы истек из-за бездействия. Пожалуйста, обновите и повторите попытку
Я новичок с Laravel и у меня есть проблема, которую я не понимаю.
У меня есть form форма журнала в моем проекте, и мой метод-POST. Когда я пытаюсь запросить результат: 'страница истекла из-за бездействия. Пожалуйста, обновите и повторите попытку.', но если я изменю метод, чтобы получить, он отлично работает. Может кто-нибудь сказать мне, почему это и как это исправить, потому что, конечно, мне нужен метод post.
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. может быть, решить вашу проблему.
это происходит потому, что вы используете промежуточное ПО 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 в вашу форму. Затем вы получаете страницу ошибки, возможно, из-за данных кэша в вашей форме. Откройте терминал / командную строку и выполните эти команды в корне проекта.
- php artisan cache: clear
- php artisan config: clear
- php artisan маршрут: очистить
- 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в заголовке, чтобы отправить его с каждым запросом.
это может быть токен csrf, которого нет в вашей форме. Вы должны использовать
@crsfили{{ csrf_field() }}если вы используете csrf в своей форме. Это может быть кэш. Очистите кэш приложения.
php artisan cache: clear
php artisan view: clear
php artisan cache: clear
и очистить кэш браузера.
- Если ошибки снова показывает вам, а затем создать новый ключ
php artisan key: generate
все еще у кого-то есть эта проблема, используйте следующий код внутри вашей формы, как показано ниже.
echo '<input type = "hidden" name = "_token" value = "'. csrf_token().'" >';


Comments