PHP会话处理程序将会话存储为JSON而不是正确解码php序列化

时间:2014-10-03 04:54:26

标签: php json session serialization amazon-dynamodb

我使用DynamoDB实现了会话处理程序。它工作正常,除了从服务器返回响应并且我在其上调用json_decode时,嵌套的php序列化会话字符串被破坏。我假设在JSON对象中存储序列化会话是不兼容的?这是一个逃避问题吗?

问题:

  1. 有办法解决这个问题吗?
  2. 是否可以在JSON中序列化会话而不是我假设使用的php serialize()?这可能会解决问题。
  3. 这就是原始文件来自数据库时的样子(注意:它真的很长,所以我自己完成了结束)

    _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对象上调用json_decode后的样子:

    _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:"
    

    似乎是截断了星号在原始位置的位置。

1 个答案:

答案 0 :(得分:1)

json和序列化在PHP中运行良好

class ClassA
    {
    public $publicMember;
    private $privateMember;
    protected $protected;
    }
$object = new ClassA();
var_dump(unserialize(json_decode(json_encode(serialize($object)))));

但是这个问题可能来自DynamoDB: Bug in DynamoDB / DynamoDB Session Handler for PHP (handling of NULL BYTES)。它似乎已关闭,但是......你可以在json_encode

之前添加base64_encode的额外换行
var_dump(unserialize(base64_decode(json_decode(json_encode(base64_encode(serialize($object)))))));