it-swarm.com.ru

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

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

54
Svetlozar

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

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

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

{{ csrf_field() }}

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

protected $except = [
    'your/route'
];
148
Erik Baars

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

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

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

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

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

Обновление:

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

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

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

7
Udhav Sarvaiya

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

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

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

3
Youssouf Cherif

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

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

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

3
José Ricardo Júnior

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

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

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

2
Rayton Kiwelu

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

 enter image description here

2
Wael Assaf

у меня была такая же проблема. использовать «очистить данные просмотра» в Chrome. может решить твою проблему.

2
Sayed Mohammad Amin Emrani

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

1
Pawel Kolodziejuk

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

SESSION_DRIVER = yourwebsite.com

1
Akash Sethi

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

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

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

1
Ayan Mohammad

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

  1. pHP кэш ремесленника: очистить 
  2. конфигурация PHP Artisan: очистить 
  3. маршрут ремесленника php: очистить 
  4. php artisan view: очистить

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

1
Aneeqa Chowdhury

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

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

Исключая URI из защиты CSRF:

Иногда вы можете захотеть исключить набор URI из защиты CSRF. Например, если вы используете Stripe для обработки платежей и используете их систему webhook, вам нужно будет исключить маршрут обработчика веб-крюков Stripe из защиты CSRF, поскольку Stripe не будет знать, какой токен CSRF отправлять на ваши маршруты.

Обычно такие типы маршрутов следует размещать за пределами группы веб-промежуточного программного обеспечения, которую RouteServiceProvider применяет ко всем маршрутам в файле route/web.php. Однако вы также можете исключить маршруты, добавив их URI к свойству $ кроме промежуточного программного обеспечения VerifyCsrfToken:

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'stripe/*',
        'http://example.com/foo/bar',
        'http://example.com/foo/*',
    ];
}
0
Kamlesh

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

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

0
samtax01

если вам нужно изменить форму действия с Javascript у вас будет такая же проблема 

1 .first вам нужно использоватьвместо {!!Form::open() !!} {!! close() !!} в laravel
2 .second вы чаще всего начинаете свое действие с https://www.example.com +your Route

Не забывайте WWW в вашем URL!

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

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

    pHP кэш ремесленника: очистить

    php artisan view: очистить

    pHP кэш ремесленника: очистить

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

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

ключ ремесленника php: генерировать

0
Turan Zamanlı

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

SESSION_DOMAIN = myapp.me

и как только я вернул его к нулю, все заработало просто отлично.

0
Ahmed Marzouk

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

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

larvel_fix_error.png

0
mysticmeelone

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

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

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

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

Route::get('login', 'Auth\[email protected]')->name('login');
Route::post('login', 'Auth\[email protected]');
Route::post('logout', 'Auth\[email protected]')->name('logout');

// Registration Routes...
Route::get('register', 'Auth\[email protected]')->name('register');
Route::post('register', 'Auth\[email protected]');

// Password Reset Routes...
Route::get('password/reset', 'Auth\[email protected]')->name('password.request');
Route::post('password/email', 'Auth\[email protected]')->name('password.email');
Route::get('password/reset/{token}', 'Auth\[email protected]')->name('password.reset');
Route::post('password/reset', 'Auth\[email protected]');
0
Notflip

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

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

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

0
ghostcoder23x

Во-первых, включите csrf в вашу форму.

{{ csrf_field() }}

если проблема не решилась, используйте ob_start(); в самом начале index.php.

<?php ob_start();
0
Abid Shah

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

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

0
Shaz