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



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



форма HTML



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


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



когда я отправляю форму (сразу после перезагрузки также), она дает это срок действия страницы истек из-за бездействия. Пожалуйста, обновите и повторите попытку. ошибка.



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



обновление



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

881   14  

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 посмотрите на этот пример кода, Как правильно его обрабатывать:

https://gist.github.com/jrmadsen67/bd0f9ad0ef1ed6bb594e

некоторая информация хранится в файле 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 лет назад.

set mbstring.func_overload = 2

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

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

у вас должен быть тип файла

FileName.blade.php на laravel
FileName.erb.rb in Ruby и Rails

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

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

Comments

    Ничего не найдено.