"Срок действия страницы истек из-за неактивности" - Laravel 5.5
На моей странице регистрации правильно отображается форма с CsrfToken ({{ csrf_field() }}
), присутствующим в форме).
Форма HTML
<form class="form-horizontal registration-form" novalidate method="POST" action="{{ route('register') }}">
{{ csrf_field() }}
....
</form>
Я использую встроенную аутентификацию для пользователей. Ничего не изменилось, кроме маршрутов и перенаправлений.
Когда я отправляю форму (также сразу после перезагрузки), она показывает, что Срок действия страницы истек из-за бездействия. Пожалуйста, обновите и повторите попытку. ошибка.
Боже мой, мне не хватает очень маленькой вещи. Но не уверен, что это является. Есть какая-нибудь помощь?
Обновление
Нашел проблему. Драйвер сеанса был установлен в массив. Изменил его на файл, и теперь ошибка исчезла. Но что плохого, если я использую массив?
14 answers
Если вы пришли к этому ответу непосредственно из поиска, убедитесь, что вы уже добавили маркер csrf в свою форму с помощью {{ csrf_field() }}
, например, OP.
Если у вас установлен драйвер сеанса в файл:
Может иметь какое-то отношение к тому, что путь к хранилищу недоступен для записи. Здесь хранятся данные сеанса, касающиеся токенов, если вы используете сеансы на основе файлов. Это можно проверить с помощью is_writable(config('session.files'))
Для операции был установлен драйвер сеанса к массиву. Массив предназначен только для тестирования. Поскольку данные не сохраняются, он не сможет сравнить маркер при следующем запросе.
Драйвер массива используется во время тестирования и предотвращает сохранение данных, хранящихся в сеансе.
Https://laravel.com/docs/5.5/session#configuration
Проверить config/sessions.php
Наконец, проблема, с которой я только что столкнулся, у нас был проект, в котором есть домен сеанса и безопасный настройки в config/session.php но сайт разработки не использовал HTTPS (SSL/TLS). Это вызвало эту общую ошибку, так как по умолчанию для sessions.secure было установлено значение true.
Я столкнулся с той же проблемой в Laravel 5.5. В моем случае это произошло после изменения маршрута от GET до POST. Проблема заключалась в том, что я забыл передать токен CSRF, когда переключился на публикацию.
Вы можете либо разместить токен 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
это было установлено непосредственно в session.php конфигурационный файл.
Для тех, у кого все еще есть проблемы и ничего не помогло. Обратите внимание на параметр php.ini mbstring.func_overload. Он должен быть установлен на 0. И mbstring.internal_encoding установлен в UTF-8. В моем случае это было проблемой.
Я изменил разрешение на хранение, и ошибка исчезла. Похоже, проблема заключалась в отсутствии разрешения.
sudo chmod -R 775 storage/
У меня было приложение с несколькими поддоменами, и файл cookie сеанса был проблемой между ними. Очистка файлов cookie решила мою проблему.
Также попробуйте установить SESSION_DOMAIN
в файле .env. Используйте точный поддомен, который вы просматриваете.
В моем случае сайт был в порядке на сервере, но не на локальном. Потом я вспомнил, что работал над защищенным сайтом.
Итак, в файле config.session.php, установите для переменной secure значение false
'secure' => env('SESSION_SECURE_COOKIE', false),
Убедитесь, что на вашем веб-сервере указано правильное системное время. В моем случае бродячая машина была в будущем (26 января 14:08:26 UTC 2226), поэтому, конечно, время в файле cookie сеанса моего браузера истекло более 200 лет назад.
Набор mbstring.func_overload = 2
Это помогло мне
Я нашел два решения, чтобы избежать этих ошибок 1) добавив защищенный $except = ['/yourroute'], можно отключить проверку токенов csrf из определенного корня. 2) просто прокомментируйте \App\Http\Промежуточное ПО\VerifyCsrfToken::строка класса в группе защищенного промежуточного ПО в ядре
У вас должен быть тип файла FileName.blade.php
в laravelFileName.erb.rb
в Рубин и рельсы
И добавьте любой
{{ csrf_token() }}
<input type="hidden" name="_token" value="{{ csrf_token() }}" >
<meta name="csrf-token" content="{{ csrf_token() }}">