Обработчик сессий PHP, сохраняющий сессию как JSON, не декодирует корректно сериализованный php

Я реализовал обработчик сеанса с помощью DynamoDB. Он работает правильно, за исключением случаев, когда ответ возвращается с сервера, и я звоню json_decode на нем вложенная строка сеанса php прервана. Я предполагаю, что хранение сериализованного сеанса внутри объекта JSON не совместимо? Это побег проблема?

Вопросы:

  1. Есть ли способ обойти это?
  2. Можно ли сериализовать сеанс в формате JSON, а не в php? 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:"

Похоже, что в оригинале усекается звездочка.

0

Решение

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)))))));
1

Другие решения

Других решений пока нет …