Я реализовал обработчик сеанса с помощью DynamoDB. Он работает правильно, за исключением случаев, когда ответ возвращается с сервера, и я звоню json_decode
на нем вложенная строка сеанса php прервана. Я предполагаю, что хранение сериализованного сеанса внутри объекта JSON не совместимо? Это побег проблема?
Вопросы:
serialize()
который я предполагаю используется? Это, вероятно, решит проблему.Вот как выглядит оригинал, когда он исходит из БД (примечание: он действительно длинный, поэтому я сам обрезал конец)
_sf2_attributes|a:4:{s:34:"_security.secured_area.target_path";s:36:"http://my.domain";s:10:"some_id";s:13:"abc123";s:8:"userData";O:27:"Some\Symfony\Bundle":49:{s:8:"�*�email";s:27:"
Вот так это выглядит после звонка json_decode
в объекте JSON эта строка находится внутри:
_sf2_attributes|a:4:{s:34:"_security.secured_area.target_path";s:36:"http://my.domain";s:10:"some_id";s:13:"abc123";s:8:"userData";O:27:"Some\Symfony\Bundle":49:{s:8:"
Похоже, что в оригинале усекается звездочка.
JSON и сериализация отлично работает в PHP
class ClassA
{
public $publicMember;
private $privateMember;
protected $protected;
}
$object = new ClassA();
var_dump(unserialize(json_decode(json_encode(serialize($object)))));
Но эта проблема может исходить от DynamoDB: ошибка в обработчике сессий DynamoDB / DynamoDB для PHP (обработка NULL БАЙТОВ). Кажется, что он закрыт, но … вы можете добавить дополнительную обертку с base64_encode перед json_encode
var_dump(unserialize(base64_decode(json_decode(json_encode(base64_encode(serialize($object)))))));
Других решений пока нет …