Пост запрос на сайт Laravel 5.7, 5.8 фреймворк Laravel --- ошибка - 419 к сожалению, время вашей сессии истекло
Я установил 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;
});
После отправки почтового запроса:
419 Извините, ваш сеанс истек. Пожалуйста, обновите и повторите попытку.
В версии 5.6
такой проблемы не было.










Ответы - Пост запрос на сайт Laravel 5.7, 5.8 фреймворк Laravel --- ошибка - 419 к сожалению, время вашей сессии истекло / Post request in Laravel 5.7, laravel 5.8 --- Error - 419 Sorry, your session has expired

10.10.2018 06:01:39
Это связано с тем, что форма требует csrf. В версии 5.7, они изменили его на @CSRF атак
<form action="" method="post">
@csrf
...
Ссылками: https://laravel.com/docs/5.7/csrf


csrf
, я просто заглянул в историю редактирования

14.10.2018 10:38:54
У меня просто была точно такая же проблема, и это было связано с тем, что я был совершенно глуп. Я отключил все поля формы (а не только кнопку отправки) с помощью javascript перед отправкой указанной формы! Это, конечно, привело к тому, что все элементы формы не были представлены (включая скрытое поле _token), что, в свою очередь, вызвало ошибку 419!
Я надеюсь, что это поможет кому-то из нескольких часов почесывания головы!

05.11.2018 03:05:11
Как насчет использования
{{ csrf_field() }}
вместо @csrf
Ошибка 419 в основном из-за проблем с токенами csrf.

{{ csrf_field() }}
?


{{ csrf_field() }}
работал на меня

06.11.2018 03:11:47
В вашем Http/Kernel.php
попробуйте прокомментировать эту строку :
\Illuminate\Session\Middleware\AuthenticateSession::class,
в вашем массиве веб-промежуточного программного обеспечения
это может быть корень вашей проблемы



09.11.2018 10:13:17
Это может быть излишним, но вы можете попробовать это:
// Форма вызова именованного маршрута со скрытым полем маркера добавлена.
<form method="POST" action="{{ route('foo') }}" >
@csrf
<input type="hidden" name="_token" value="{!! csrf_token() !!}">
<input type="text" name="name"/><br/>
<input type="submit" value="Add"/>
</form>
// Названный Маршрут
Route::post('/foo', function () {
return 'bar';
})->name('foo');
// Добавить в <head></head>
блок:
<meta name="_token" content="{!! csrf_token() !!}" />
Я тестировал его на своем локальном использовании Homestead на Laravel 5.7, который был свежей установкой с использованием Laravel Installer 2.0.1, и он работал. Каково ваше окружение?
Теория: интересно, имеет ли это какое-то отношение к блейд-рендерингу html-тегов с {{ }}
vs{!! !!}
на вашей среде или как вы ее обслуживаете (например. php artisan serve
). Что заставляет меня думать, что это line 335
из /vendor/laravel/framework/src/illuminate/Foundation/helpers.php
должен отображать одну и ту же строку, введенную вручную выше.

<meta>
в форме? Какая магия заключается в том, что.

<meta>
должны быть размещены внутри <head>
, а не внутри <body>
. Я не уверен, что HTML-валидатор хотел бы этого.


09.11.2018 10:39:04
У меня также была такая проблема, и я обнаружил, что файлы сеанса были заблокированы для записи. Итак, я не знаю, используете ли вы свой Laravel через такие вещи, как vagrant или Docker, но я советую вам попытаться изменить права каталога сеансов (и файлов, конечно) (когда вы запускаете Laravel в виртуальной машине, вы должны изменить права локально и в виртуальной машине (например, когда Вы делитесь файлами через NFS)
Подобный этому:
chmod -R 777 storage/framework/sessions
chmod -R 777 storage/logs
Я знаю, разрешение 777-это худшая катастрофа, которую вы можете себе представить. Но они удобны для устранения неполадок.
Чтобы быть уверенным, что я никогда не забуду это, я сделал сценарий bash. (Назвал его lalog, просто потому, что я хотел очистить файлы журнала и установить разрешения)
Примечание: убедитесь,что вы используете это в каталоге сеанса. В конфигурации/сессии.php есть files
Расположение: /usr / bin/lalog (это файл, а не каталог)
Выполнить в оболочке, как <?php
//...........
'files' => storage_path('framework/sessions'),
//...........
lalog
Внимание! Это позволит писать доступ для всех, так что будьте осторожны с ним! Также, возможно, в файле журнала Laravel есть полезная информация. (обязательно загляните в этот файл журнала перед запуском моего сценария bash)
Кроме того, я знаю, что это уже упоминалось. Но, будьте полностью уверены, что вы всегда
- Разрешить cookies в браузере, чтобы маркер можно было установить в cookies
- Проверьте, используете ли вы
#!/bin/bash rm -rf /home/username/Projects/x/storage/logs/laravel.log echo "Laravel log removed" touch /home/username/Projects/x/storage/logs/laravel.log echo "Laravel log created" chmod -R 777 /home/username/Projects/x/storage/ echo "CHMOD 777 on Storage dir"
в файле Блейда
Форма должна быть примерно такой
@csrf

09.11.2018 05:58:50
Вы не можете сделать пустой возврат на Laravel 5.6 или выше. Laravel всегда ожидает, что значение будет возвращено. (Я знаю из прошлого опыта). Это в основном связано с тем, как PHP 7 обрабатывает пустые возвраты.

10.11.2018 04:41:45
Вы неправильно добавили поле CSRF. Вместо @csrf
вы должны использовать csrf_field()
вот так:
<form method="POST" action="/foo" >
{{ csrf_field() }}
<input type="text" name="name"/><br/>
<input type="submit" value="Add"/>
</form>

11.11.2018 03:34:13
В коде нет никаких проблем. Я проверил с тем же кодом, что вы написали с новой установкой.
код формы:
<form method="POST" action="/foo" >
@csrf
<input type="text" name="name"/><br/>
<input type="submit" value="Add"/>
</form>
web.php
код файла:
Route::get('/', function () {
return view('welcome');
});
Route::post('/foo', function () {
echo 1;
return;
});
Результат после отправки формы:
Если вы очистите кэш браузера или попробуете с другим браузером, я думаю, что это будет исправлено.


11.11.2018 08:25:49
На самом деле SCRF-это токен на основе сеанса. Добавьте свой маршрут в группу маршрутов и добавьте промежуточное программное обеспечение, которое управляет сеансами.
web-это промежуточное программное обеспечение по умолчанию в laravel, и оно может управлять запросами сеанса.
Route::group(array('middleware' => ['web']), function () {
Route::post('/foo', function () {
echo 1;
return;
});
});

11.11.2018 11:59:34
Перед чтением ниже убедитесь, что у вас есть @csrf
или {{ csrf_field() }}
в вашей форме
любить
<form method="post">
@csrf <!-- {{ csrf_field() }} -->
... rest of form ...
</form>
Сообщение об ошибке сеанса истекло, потому что где-то ваша проверка токена csrf терпит неудачу, что означаетApp\Http\Middleware\VerifyCsrfToken::class
middleware уже включено. В форме @csrf
blade, которая также должна быть прекрасной.
Тогда другая область для проверки-это сессия. csrf
файл env, поддерживаемые драйверы приведены ниже
Поддерживаемые драйверы сеансов в Laravel 5.7 (Doc Link)
.env
сессии хранятся в хранилище / framework / sessions.file
-сессии хранятся в защищенных, зашифрованных файлах cookie.cookie
данных-сеансы хранятся в реляционной базе данных.database
/memcached
- сессии хранятся в одном из этих быстрых хранилищ на основе кэша.redis
-сессии хранятся в массиве PHP и не будут сохраняться.
Если ваша форма работает после переключения драйвера сеанса, то что-то не так с этим конкретным драйвером, попробуйте исправить ошибку оттуда.
Возможные сценарии возникновения ошибок
Вероятно, сеансы на основе файлов могут не работать из-за проблем с разрешениями
array
(быстрый поиск в Google принесет вам решение)В случае драйвера базы данных ваше соединение с БД может быть неправильным, или таблица
/storage
может не существовать или неправильно настроена (неправильная часть конфигурации была подтверждена как проблема в соответствии с комментарием @Junaid Qadir).sessions
неверна или одновременно управляется каким-либо другим фрагментом кода в системе.
Это может быть хорошей идеей для выполнения redis/memcached
и генерировать новый ключ приложения, который, в свою очередь, будет очищать данные сеанса.
Очистить кэш браузера трудно, я обнаружил, что chrome и firefox являются виновником больше, чем я могу вспомнить.

_token
с IP, который Chrome и HTTP Cookie Specs считают небезопасным.




12.11.2018 11:58:07
По умолчанию у меня не было этой проблемы. Так что я сделал это chmod -R 644 sessions
чтобы воспроизвести проблему.
Впоследствии я дал разрешения на папку сеансов chmod -R 755 sessions
теперь мой код проекта снова работает.
Причина этого заключается в том, что вы храните свой кэш в файле с отсутствием записи разрешения.
Файл конфигурации сеанса хранится в config / session.РНР. Быть обязательно просмотрите параметры, доступные в этом файле. По умолчанию, Laravel настроен на использование драйвера сеанса file, который будет работать хорошо для многих применений. В производственных приложениях вы можете рассмотрите возможность использования драйверов memcached или redis для еще более быстрого сеанса спектакль.
Решения:
1-Как я установил выше, вы можете дать 755 разрешение на папку сеансов. 2-Вы можете использовать другую конфигурацию драйвера сеанса.
файловые сессии хранятся в хранилище / framework / sessions. печенье - сеансы хранятся в защищенных, зашифрованных файлах cookie. база данных-сессии хранятся в реляционной базе данных. memcached / redis-сессии являются хранится в одном из этих быстрых хранилищ на основе кэша. массив-сессии являются хранится в массиве PHP и не будет сохраняться.
Имейте в виду; если вы хотите использовать memcached/redis, вам нужно установить их на свой сервер или ваш контейнер Docker redis должен быть запущен.



03.12.2018 07:10:27
Попробуйте закомментировать \App\Http\Middleware\EncryptCookies::class
В \app\Http\Kernel.php
У меня есть аналогичная проблема, и я решил ее, сделав это.
Вероятно, не лучшее решение, потому что безопасность, но по крайней мере это сработало.
Раньше я пробовал:
- Очистить кэш
- Создать новый ключ приложения
- Запустите мое приложение в различных браузерах (Chrome 70, Mozilla Firefox 57 и IE 11)
- Запустите мое приложение на другом компьютере
- Комментарий
\App\Http\Middleware\VerifyCsrfToken::class
В\app\Http\Kernel.php
- Комментарий
\Illuminate\Session\Middleware\AuthenticateSession::class
В\app\Http\Kernel.php
- Обновление и понижение Laravel (между 5.6 и 5.7)
Но ничего из вышеперечисленного не сработало для меня.
РЕДАКТИРОВАТЬ
Мой случай здесь каждый раз, когда я вхожу в систему, будет создан новый файл сеанса (старый все еще сохраняется, но внезапно забывается. Проверьте storage/framework/sessions
) и генерируется новый токен CSRF. Так что проблема не в VerifyCsrfToken.
Как упоминалось в разделе комментариев @Vladd, вы никогда не должны комментировать \App\Http\Middleware\VerifyCsrfToken::class
. Вы должны проверить, что вы отправили правильный токен CSRF на сервер.





07.12.2018 08:21:16
Просто чтобы поставить его там, у меня были те же проблемы. На моей локальной усадьбе он будет работать так, как ожидалось, но после нажатия его на сервер разработки я также получил сообщение о таймауте сеанса. Выяснив, что это проблема среды, я перешел с apache на nginx, и это чудесным образом заставило проблему уйти.

14.12.2018 05:31:55
Я использую Laravel 5.7 У меня была та же проблема, и это было потому, что токен csrf не был в форме, поэтому добавление
@csrf
устранить проблему

06.02.2019 11:14:50
случай 1: Если вы запускаете проект в локальной системе, например 127.0.01: 8000 ,
затем
добавьте SESSION_DOMAIN=
в свой .env файл
или в вашей конфигурации / сессии.РНР 'domain' => env('SESSION_DOMAIN', ''),
а затем запустите php artisan cache:clear
случай 2: если проект работает на сервере, и у вас есть домен, как "mydomain.com"
добавить SESSION_DOMAIN=mydomain.com
в вашем .env файл
или в вашей конфигурации / сессии.РНР 'domain' => env('SESSION_DOMAIN', 'mydomain.com'),
а затем запустите php artisan cache:clear


16.02.2019 12:47:36
измените свой @csrf
в приветствии.лезвие.php to <input type="hidden" name="_token" value="{{ csrf_token() }}">
так что ваш код, как это:
<form method="POST" action="/foo" >
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="text" name="name"/><br/>
<input type="submit" value="Add"/>
<button type="submit">Submit</button>
</form>

28.03.2019 04:59:54
Я получил эту проблему давно. Я вспомнил, что это вызывает разрешение storage/framework/sessions
. Вы можете изменить его с помощью chmod -R 0777 storage/framework/sessions
. Это сработало для меня.

20.05.2019 10:52:59
После стольких лет я решил это таким образом
Мой путь установки laravel не совпадал с заданным в сеансе файла конфигурации.РНР
'domain' => env('SESSION_DOMAIN', 'example.com'),


28.06.2019 07:42:46
В моем случае это очень смешно. Я получаю ошибку 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();
Может быть, это поможет и вашему делу. Удачи.



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


01.10.2019 10:19:58
добавить CSRF токен и ваша проблема будет решена . {{csrf_token}} или @CSRF атак

11.10.2019 08:11:37
Это может быть проблема с вашим сеансом. После игры с этими настройками я решил свою проблему. Для меня это оказалось последним вариантом.
- Если вы используете" файл " в качестве драйвера сеанса посмотрите хранение / структура / сеансы, если сеансы сохраняются после обновить. Если нет, то это, скорее всего, из-за неправильной папки разрешения. Убедитесь, что ваше хранилище/ папка имеют правильное право
- Попробуйте отключить все JavaScript на ваших страницах (либо отключение это через навигатор или внутри кода) и убедитесь, что 'http_only' => истинный,
- Попробуйте использовать С и без HTTPS
- Убедитесь, что переменная SESSION_DRIVER не имеет значения null
- Попробуйте переключаться между 'зашифровать' => false и 'шифровать' => правда,
- Попробуйте изменить имя файла cookie 'cookie' = > 'laravelsession',
- Попробуйте либо установить SESSION_DOMAIN для вашего фактического домена, либо null
- Попробуйте переключиться между 'secure' = > env ('SESSION_SECURE_COOKIE', false), и 'secure' = > env ('SESSION_SECURE_COOKIE', true),
Источник: сеанс Laravel всегда изменяет каждое обновление / запрос в Laravel 5.4

SESSION_SECURE_COOKIE
) сделал это для меня. (на false
)


03.11.2019 04:17:21
Я просто хочу сказать, убедитесь, что токен csrf генерируется, иногда это просто пустой массив, например, в форме повторителя, если вы не генерируете внутри запроса js.

16.11.2019 02:03:39
Если у вас уже есть директива csrf, возможно, вы изменили способ выполнения сеансов.
В конфигурации/сессии.php, проверьте поле "безопасный". Он должен быть на false, если https не доступен на вашем сервере.
Вы также можете поставить SESSION_SECURE_COOKIE=FALSE на вашем .env-файл (корневой каталог).