Опубликовать запрос в Laravel 5.7, laravel 5.8 --- Ошибка - 419 Извините, срок вашей сессии истек - PullRequest
0 голосов
/ 01 октября 2018

Я установил Laravel 5.7

Добавил форму в файл \resources\views\welcome.blade.php

<form method="POST" action="/foo" >
    @csrf
    <input type="text" name="name"/><br/>
    <input type="submit" value="Add"/>
</form>

Добавил в файл \routes\web.php

Route::post('/foo', function () {
    echo 1;
    return;
});

После отправки POSTзапрос:

419 К сожалению, ваш сеанс истек.Пожалуйста, обновите и попробуйте снова.

В версии 5.6 такой проблемы не было.

Ответы [ 26 ]

0 голосов
/ 19 мая 2019

Просто измените .env SESSION_DRIVER = cookie

0 голосов
/ 11 ноября 2018

Перед прочтением ниже убедитесь, что в вашей форме есть @csrf или {{ csrf_field() }} как

<form method="post">
@csrf <!-- {{ csrf_field() }} -->
... rest of form ...
</form>

Появляется сообщение об ошибке истекшего сеанса, потому что где-то не удается проверить токен csrfэто означает, что промежуточное программное обеспечение App\Http\Middleware\VerifyCsrfToken::class уже включено.В форме директива блейда @csrf уже добавлена, что также должно быть хорошо.

Тогда другой областью, которую нужно проверить, является сессия.Проверка токена csrf напрямую связана с вашим сеансом, поэтому вы можете проверить, работает ли ваш драйвер сеанса, например, неправильно настроенный Redis может вызвать проблему.

Возможно, вы можете попробовать переключитьсяваш драйвер сеанса / программное обеспечение из файла .env, поддерживаемые драйверы приведены ниже

Поддерживаемые драйверы сеансов в Laravel 5.7 (Doc Link)

  • file - сеансы хранятся в хранилище / фреймворке / сеансах.
  • cookie - сеансы хранятся в безопасных, зашифрованных файлах cookie.
  • database - сеансы хранятся в реляционной базе данных.
  • memcached / redis - сеансы хранятся в одном из этих быстрых хранилищ на основе кэша.
  • array - сеансы хранятся в массиве PHP и не будут сохраняться.

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

Возможные сценарии, подверженные ошибкам

  • Вероятно, файловые сеансы могут не работать из-за проблем с правами доступа к каталогу /storage (быстрое прибегание к поиску поможет вам найти решение)

  • В случае с драйвером базы данных, ваше соединение с БД может быть неправильным, или таблица sessions может не существовать или неправильно настроена (неправильная часть конфигурации была подтверждена как проблема согласно комментарию @JunaidQadir).

  • redis/memcached конфигурация неверна или одновременно обрабатывается каким-то другим фрагментом кода в системе.

Это может быть хорошимидея исполнитьe php artisan key:generate и создайте новый ключ приложения, который, в свою очередь, сбросит данные сеанса.

Очистить кэш браузера HARD , я обнаружил, что Chrome и Firefox являются преступником, которого я не помню.

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

0 голосов
/ 28 июня 2019

В моем случае это очень смешно.Я получаю ошибку 419, когда помещаю Auth::routes() в начало файла маршрута.

Auth::routes();

Route::middleware('auth')->group(function () {
    Route::get('/', 'DashboardController@index')->name('dashboard');
});

И я исправил ошибку, переместив Auth::routes(); в конец файла маршрута.

Route::middleware('auth')->group(function () {
    Route::get('/', 'DashboardController@index')->name('dashboard');
});

Auth::routes();

Возможно, это может помочь и вашему делу.Удачи.

0 голосов
/ 12 ноября 2018

По умолчанию у меня не было этой проблемы.Итак, что я сделал, это chmod -R 644 sessions, чтобы повторить проблему.

enter image description here

После этого я дал разрешения для папки сессий chmod -R 755 sessions

, теперь мой код проекта снова работает.

enter image description here

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

Файл конфигурации сеанса хранится в config /session.php.Обязательно ознакомьтесь с опциями, доступными вам в этом файле.По умолчанию Laravel настроен на использование драйвера файлового сеанса, который будет хорошо работать для многих приложений.В производственных приложениях вы можете рассмотреть возможность использования драйверов memcached или redis для еще большей производительности сеансов.

Решения:

1 - Как я уже исправил выше, вы можете дать 755 разрешений на сеансыпапка.2 - Вы можете использовать другую конфигурацию драйвера сеанса.

file - сессии хранятся в хранилище / framework / session.cookie - сессии хранятся в безопасных, зашифрованных куки.база данных - сеансы хранятся в реляционной базе данных.memcached / redis - сессии хранятся в одном из этих быстрых хранилищ на основе кэша.массив - сеансы хранятся в массиве PHP и не будут сохраняться.

Помните;Если вы хотите использовать memcached / redis, вы должны установить их на своем сервере, или ваш контейнер докера redis должен быть запущен.

0 голосов
/ 13 августа 2019

Обратите внимание, что вы получаете сообщение об ошибке 419, если вы пытаетесь загрузить большой файл, размер файла которого превышает ограничение.В этом случае вы можете увеличить и upload_max_filesize, и post_max_size до разумной суммы (например, 10 или 20 миллионов зависит от вашего варианта использования и ресурсов), проверьте здесь: https://stackoverflow.com/a/2184541/2100489

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

0 голосов
/ 10 октября 2018

Это потому, что форма требует CSRF.В версии 5.7 они изменили его на @ csrf

<form action="" method="post">
    @csrf
    ...

Referene: https://laravel.com/docs/5.7/csrf

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