Я получаю случайные TokenMismatchExceptions в Laravel 5. Используя следующий код в функции tokensMatch()
Я пытался отладить этот странный вопрос:L5 случайные TokenMismatchExceptions
Log::debug($request->session()->token(). ', ' . $token);
Выход следующим образом:
[2015-03-21 17:04:22] local.DEBUG: XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT, XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT
[2015-03-21 17:04:34] local.DEBUG: XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT, XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT
[2015-03-21 17:04:36] local.DEBUG: snE0IERJ1VY0o4qmSMuHb4wH9lhQUf5ZtVObOFnR, XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT
[2015-03-21 17:04:36] local.ERROR: exception 'Illuminate\Session\TokenMismatchException' in vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php:47
Stack trace:
[...]
[2015-03-21 17:07:30] local.DEBUG: XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT, XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT
Как видите, первые 2 запроса успешны, третий из них терпит неудачу, а 4-й - снова. Я использую сетевые инструменты Fiddler и Chrome, и я могу подтвердить, что точно такие же данные были отправлены на сервер для всех запросов.
Так что, похоже, изменения токена на стороне сервера. Странно то, что токен в файле сеанса, похоже, не меняется, и неправильный токен всегда является строкой, которую я раньше не видел, но всегда возвращается к исходной строке каким-то образом.
Это случается довольно часто, так что это действительно раздражает. Сначала я подумал, что это может быть что-то вроде драйвера сеанса базы данных, но теперь я использую драйвер файла, и это все еще происходит.
Update
Я продолжаю с этой проблемой. У меня это на разных компьютерах и разных проектах, используя php artisan serve
. Я также использую его на разных серверах и разных проектах (nginx 1.6.2, PHP 5.6.7).
I'm not the only one with this problem.
Это довольно сложно отлаживать, поскольку это происходит случайным образом, иногда оно не появляется некоторое время, а затем внезапно это происходит много раз подряд или только один раз. Просто повторно отправляя запрос POST, он иногда работает снова или иногда приводит к другому исключению.
Единственное, что я добавил в composer.json
во всех проектах: "illuminate/html": "5.*"
. Все пакеты композиторов актуальны.
Я обновлю этот вопрос, как только у меня появится дополнительная информация об этой действительно странной проблеме.
Очередное обновление
Я создал новый проект L5, и добавил некоторый минимальный код, чтобы воспроизвести эту ошибку. Изменения, которые я сделал, можно увидеть here (вместе с полным тестовым проектом). Я попробую отладку с этим проектом сейчас.
Вы внесли какие-либо изменения в конфигурацию сеанса Laravel? – verheesj
Да, я поменял драйвер на базу данных, но я вернул его в файл, потому что думал, что это может вызвать проблему, но проблема все еще сохраняется. –
Какая у вас настройка? например, Apache/Nginx, PHP-версия и т. д. Также вы можете сообщить мне, меняется ли токен, хранящийся в файле cookie? Вы можете сделать это с помощью инструментов разработчика> resources> Cookies – verheesj