"Срок действия страницы истек из-за бездействия" - Laravel 5.5
моя страница регистрации показывает форму правильно с CsrfToken ({{ csrf_field() }}) представить в форме).
форма HTML
<form class="form-horizontal registration-form" novalidate method="POST" action="{{ route('register') }}">
{{ csrf_field() }}
....
</form>
Я использую встроенную аутентификацию для пользователей. Ничего не изменилось, кроме маршрутов и переадресаций.
когда я отправляю форму (сразу после перезагрузки также), она дает это срок действия страницы истек из-за бездействия. Пожалуйста, обновите и повторите попытку. ошибка.
Мой быть мне не хватает очень маленькая вещь. Но не уверен, что это. Какая-нибудь помощь?
обновление
нашел проблему. Драйвер сеанса был установлен в массив. Изменил его в файл, и теперь ошибка исчезла.
Но что не так, если я использую массив?
14 ответов:
Если вы приходите к этому ответу непосредственно из поиска, убедитесь, что вы уже добавили маркер csrf в свою форму с помощью
{{ csrf_field() }}Как ОП.
Если у вас установлен драйвер сеанса в файл:
может иметь какое-то отношение к тому, что путь storage_path не доступен для записи. Здесь хранятся данные сеанса относительно токенов, если вы используете сеансы на основе файлов. Это можно проверить с помощью
is_writable(config('session.files'))
для OP драйвер сеанса был установлен в массив. массив предназначен только для тестирования. Поскольку данные не сохраняются, он не сможет сравнить маркер при следующем запросе.
драйвер массива используется во время тестирования и предотвращает сохранение данных в сессию сохраняется.
https://laravel.com/docs/5.5/session#configuration
Регистрация конфигурация/сеансы.php
наконец, проблема, которую я только что имел, у нас был проект, который имеет домен сеанса и безопасные настройки в config/session.php, но сайт разработки не использовал HTTPS (SSL/TLS). Это вызвало эту общую ошибку с момента сеансов.по умолчанию для параметра secure было установлено значение true.
я столкнулся с той же проблемой в Laravel 5.5. В моем случае это произошло после изменения маршрута от GET до POST. Проблема была в том, что я забыл передать токен CSRF, когда я переключился на POST.
вы можете либо разместить маркер CSRF в своей форме, позвонив:
{{ csrf_field() }}или исключить маршрут в app / Http / Middleware / VerifyCsrfToken.php
protected $except = [ 'your/route' ];
попробуйте все из них.
composer dump-autoload php artisan optimize php artisan cache:clear php artisan config:clear php artisan route:clear php artisan view:clear
это вызвано из-за
Illuminate\Session\TokenMismatchExceptionпосмотрите на этот пример кода, Как правильно его обрабатывать:
некоторая информация хранится в файле cookie, который связан с предыдущими версиями laravel в разработке. Таким образом, он конфликтует с генерируемыми CSRF токенами, которые генерируются чужими версиями. Просто очистите печенье и дать попробовать.
мое дело было решено с
SESSION_DOMAINв моей локальной машине должен быть установлен доxxx.localhost. Это вызывало конфликты с производствомSESSION_DOMAIN,xxx.comЭто было установлено непосредственно в сеансе.php-файл конфигурации.
для тех, у кого все еще есть проблемы и ничего не помогло. Обратите внимание на PHP.ini mbstring.параметр func_overload. Он должен быть установлен в 0. И mbstring.internal_encoding установлен в UTF-8. В моем случае это была проблема.
Я меняю разрешение на хранение и ошибка исчезла. Кажется, отсутствие разрешения было проблемой.
sudo chmod -R 775 storage/
У меня было приложение с несколькими поддоменами, и cookie сеанса был проблемой между ними. Очистка куки-файлов решила мою проблему.
кроме того, попробуйте установить
SESSION_DOMAINна .env. Используйте точный субдомен, который вы просматриваете.
в моем случае сайт был в порядке на сервере, но не в локальном. Потом я вспомнил, что работал над защищенным сайтом.
Так что в файле config.сессия.php, установите переменную secure в false'secure' => env('SESSION_SECURE_COOKIE', false),
убедитесь, что на вашем веб-сервере есть правильное системное время. В моем случае машина vagrant была в будущем (26 января 14:08:26 UTC 2226), поэтому, конечно, время в сеансе cookie моего браузера истекло около 200 лет назад.
Я нашел два решения, чтобы избежать этих ошибок 1)путем добавления охраняемых $за исключением = ['/yourroute'] можно отключить CSRF для проверки маркеров с определенными корень. 2) просто комментарий \App\Http\Middleware\VerifyCsrfToken::class line в защищенной группе middleware в ядре
у вас должен быть тип файла
FileName.blade.phpна laravelFileName.erb.rbin Ruby и Railsи добавить любой
{{ csrf_token() }}<input type="hidden" name="_token" value="{{ csrf_token() }}" ><meta name="csrf-token" content="{{ csrf_token() }}">
Comments