2015-03-21 2 views
3

Я получаю случайные 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 (вместе с полным тестовым проектом). Я попробую отладку с этим проектом сейчас.

+0

Вы внесли какие-либо изменения в конфигурацию сеанса Laravel? – verheesj

+0

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

+0

Какая у вас настройка? например, Apache/Nginx, PHP-версия и т. д. Также вы можете сообщить мне, меняется ли токен, хранящийся в файле cookie? Вы можете сделать это с помощью инструментов разработчика> resources> Cookies – verheesj

ответ

5

Это известная проблема с Laravel 5 для человек.

Существует открытый Github билет на эту тему здесь: https://github.com/laravel/framework/issues/8172

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

Предлагаю вам внести свою информацию в этот билет и заглянуть туда для получения дополнительной информации.

+1

Они закрыли вопрос, не решив его. –

+0

Обновление: вот проблема и возможное решение для [L5.2] (https://github.com/laravel/framework/issues/13064) – avn

Смежные вопросы