Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将会话存储为JSON的PHP会话处理程序未正确解码PHP序列化_Php_Json_Session_Serialization_Amazon Dynamodb - Fatal编程技术网

将会话存储为JSON的PHP会话处理程序未正确解码PHP序列化

将会话存储为JSON的PHP会话处理程序未正确解码PHP序列化,php,json,session,serialization,amazon-dynamodb,Php,Json,Session,Serialization,Amazon Dynamodb,我已经使用DynamoDB实现了一个会话处理程序。它工作正常,除了从服务器返回响应并调用json\u decode时,嵌套的php序列化会话字符串被破坏。我假设在JSON对象中存储序列化会话是不兼容的?这是一个逃避问题吗 问题: 有没有办法绕过这个问题 可以用JSON而不是我假设使用的phpserialize()来序列化会话吗?这可能会解决问题 这是原作在DB中的外观(注意:它很长,所以我自己剪掉了末端) 这是在调用此字符串所在的json对象上的json\u decode后的结果: _sf2_a

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

问题:

  • 有没有办法绕过这个问题
  • 可以用JSON而不是我假设使用的php
    serialize()
    来序列化会话吗?这可能会解决问题
  • 这是原作在DB中的外观(注意:它很长,所以我自己剪掉了末端)

    这是在调用此字符串所在的json对象上的
    json\u 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:"
    

    它似乎在原来的星号处被截断。

    json和序列化在PHP中工作良好

    class ClassA
        {
        public $publicMember;
        private $privateMember;
        protected $protected;
        }
    $object = new ClassA();
    var_dump(unserialize(json_decode(json_encode(serialize($object)))));
    
    但这一问题可能来自中国。它似乎关闭了,但是。。。您可以在json_编码之前添加额外的包装

    var_dump(unserialize(base64_decode(json_decode(json_encode(base64_encode(serialize($object)))))));
    

    如果它是序列化的,您应该使用
    unserialize()
    来解码它,而不是
    json\u decode()
    。请显示您的代码。php会话将自动序列化为php使用的任何格式。然后我将其存储在使用JSON的DynamoDB中,因此我有一个包含php会话的JSON对象。当我调用json_decode时,它将所有内容都作为一个数组提供,但会话字符串被截断。使用base64编码有效。我将进一步研究为什么没有base64它会失败。这个错误是针对用于PHP的AWS SDK版本1的,因为它使用SimpleXML处理所有事情。版本2没有。但是,空字节显然是问题发生的地方。您在哪里应用base64编码?@jeremy-我尝试了将会话数据传递给写入方法的编码:
    $this->sessionHandler->write($sessionId,base64_encode($data))
    然后在read方法中对其进行解码。这似乎解决了问题,但感觉有点不对劲。我很乐意帮你找出确切的原因。如果你想在论坛上讨论,我已经在论坛上打开了一个帖子:酷。我将对此进行更深入的研究,但可能要到下周晚些时候。
    var_dump(unserialize(base64_decode(json_decode(json_encode(base64_encode(serialize($object)))))));