Подтвердить что ты не робот

"Срок действия страницы истек из-за бездействия" - Laravel 5.5

Моя страница регистрации правильно показывает форму с помощью CsrfToken ({{ csrf_field() }}), представленной в форме).

Форма HTML

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

Я использую встроенную аутентификацию для пользователей. Не изменили ничего, кроме маршрутов и перенаправлений.

Когда я отправляю форму (сразу после перезагрузки), она дает, что Истекает страница из-за неактивности. Обновите и повторите попытку..

Мое, что мне не хватает очень маленькой вещи. Но не уверен, что это такое. Любая помощь?

Обновление

Обнаружена проблема. Драйвер сеанса был настроен на массив. Изменен файл, и ошибка исчезла. Но что не так, если я использую массив?

4b9b3361

Ответ 1

Если вы пришли к этому ответу непосредственно из поиска, убедитесь, что вы уже добавили токен csrf в свою форму с помощью {{ csrf_field() }}, как OP.


Если ваш драйвер сеанса установлен в файл:

Может быть связано с тем, что storage_path недоступен для записи. Здесь хранятся данные о токенах, если вы используете файловые сессии. Можно проверить с помощью is_writable(config('session.files'))


Для OP драйвер сеанса был установлен в массив. Массив только для тестирования. Поскольку данные не сохраняются, они не смогут сравнивать токен при следующем запросе.

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

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


Проверьте config/session.php

Наконец, у меня только что возникла проблема: у нас был проект с доменом сеанса и настройками безопасности в config/session.php, но сайт разработки не использовал HTTPS (SSL/TLS). Это вызвало эту общую ошибку, так как для sessions.secure было установлено значение true по умолчанию.

Ответ 2

Я столкнулся с той же проблемой в Laravel 5.5. В моем случае это произошло после изменения маршрута с GET на POST. Проблема была в том, что я забыл передать токен CSRF, когда я переключился на POST.

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

 {{ csrf_field() }}

Или исключить свой маршрут в приложении /Http/Middleware/VerifyCsrfToken.php

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

Ответ 3

Попробуйте все из них.

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

Ответ 5

Мой случай был решен с помощью SESSION_DOMAIN, на моей локальной машине должен был быть установлен xxx.localhost. Это вызывало конфликты с xxx.com SESSION_DOMAIN, xxx.com который был установлен непосредственно в файле конфигурации session.php.

Ответ 6

Некоторая информация хранится в файле cookie, который связан с предыдущими версиями laravel в разработке. Таким образом, он конфликтует с csrf, генерируемыми токенами, которые генерируются другими версиями. Просто очистите файл cookie и попробуйте.

Ответ 7

Для тех, у кого еще есть проблемы и ничего не помогло. Обратите внимание на параметр php.ini mbstring.func_overload. Он должен быть установлен в 0. И mbstring.internal_encoding должен быть в UTF-8. В моем случае это было проблемой.

Ответ 8

В моем случае сайт был в порядке на сервере, но не на локальном. Тогда я помню, что работал над безопасным сайтом.
Поэтому в файле config.session.php установите для переменной secure значение false

'secure' => env('SESSION_SECURE_COOKIE', false),

Ответ 9

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

sudo chmod -R 775 storage/

Ответ 10

Убедитесь, что на вашем веб-сервере установлено правильное системное время. В моем случае бродячая машина была в будущем (26 января 14:08:26 UTC 2226), поэтому, конечно, время в моем файле cookie сеанса браузера истекло несколько 200+ лет назад.

Ответ 11

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

Также попробуйте установить SESSION_DOMAIN в файле .env. Используйте точный субдомен, который вы просматриваете.

Ответ 12

set mbstring.func_overload = 2

это помогло мне

Ответ 13

Я нашел два решения, чтобы избежать этой ошибки: 1) добавив защищенный $ кроме = ['/yourroute'] возможное отключение проверки токена csrf из определенного корня. 2) просто прокомментируйте строку \App\Http\Middleware\VerifyCsrfToken :: class в группе защищенного промежуточного ПО в ядре

Ответ 14

У меня была такая же проблема, но проблема не в фреймворке, а в браузере. Я не знаю почему, но в моем случае Google Chrome блокирует куки автоматически. После разрешенных куки проблема была решена.

Ответ 15

Краткий ответ

Добавьте запись маршрута для register в app/Http/Middleware/VerifyCsrfToken.php

protected $except = [
        '/routeTo/register'
    ];

и очистите кеш и маршрут кеша с помощью команд:

php artisan cache:clear && php artisan route:clear

Подробнее

Каждый раз, когда вы заходите на сайт Laravel, генерируется токен, даже если сеанс не был запущен. Затем в каждом запросе этот токен (хранящийся в файлах cookie) будет проверяться по времени его истечения, установленному в поле SESSION_LIFETIME в файле config/session.php.

Если вы оставляете сайт открытым дольше срока действия и пытаетесь сделать запрос, этот токен будет оценен, и ошибка срока действия вернется. Таким образом, чтобы пропустить эту проверку в формах, которые находятся за пределами функций аутентифицированных пользователей (таких как регистрация или вход в систему), вы можете добавить маршрут исключения в app/Http/Middleware/VerifyCsrfToken.php.

Ответ 16

Вы должны иметь тип файла

FileName.blade.php в laravel
FileName.erb.rb в Ruby и Rails

и добавить любой

  1. {{ csrf_token() }}
  2. <input type="hidden" name="_token" value="{{ csrf_token() }}" >
  3. <meta name="csrf-token" content="{{ csrf_token() }}">