Я тяну свои волосы над этим.
Я реализовал обработчик сеанса Symfony, используя DynamoDB и AWS PHP SDK: http://docs.aws.amazon.com/aws-sdk-php/guide/latest/feature-dynamodb-session-handler.html
Кажется, что обработчик сеанса работает на моем локальном компьютере совершенно нормально, я вижу, что сеанс правильно создан в Dynamo, затем при входе в систему создается новый сеанс, и данные переносятся в него, как и ожидалось. Все хорошо здесь.
Проблема в том, что когда я переносил это на свои промежуточные или производственные серверы в AWS, что-то не так при переносе сеанса. Я захожу на свою страницу входа и вижу, что сессия была создана, как и ожидалось, затем, когда я захожу, создается новая сессия, но данные НЕ переносятся на нее, что приводит к сбросу меня обратно на страницу входа.
Последние два дня я копался, пытаясь понять, где что-то пошло не так, но не могу понять.
Я попробовал все предложения в этой ветке ошибок, но ни одно из них не сработало, поэтому я предполагаю, что могу иметь дело с отдельной проблемой: https://github.com/symfony/symfony/issues/6417
Я также пытался использовать pessimistic
locking_strategy
который, кажется, не имеет никакого значения.
Промежуточный и рабочий серверы имеют ту же конфигурацию, что и мои локальные настройки, за исключением xDebug.
Я перевел промежуточный сервер в режим разработки с включенной отладкой, чтобы попытаться найти проблему в профилировщике, но я не вижу там ничего интересного, запросы следующие:
domain.com/login
(сеанс а)domain.com/login_check
(сеанс а)domain.com
(сессия б)domain.com/login
(сессия б)Образец выше продолжает повторяться.
Любое руководство о том, как отладить это, будет оценено, я даже не уверен, где искать, особенно учитывая, что я не могу воспроизвести на своей локальной машине с xDebug.
Это оказалось проблемой с расширением PHP jsonc, где json_decode
ломался, если были нулевые байты (сериализованный защищенный метод имеет нулевые байты). Это было исправлено с версии 1.3.3.
http://pecl.php.net/package-changelog.php?package=jsonc&выпуск = 1.3.5
Других решений пока нет …