我已经使用DynamoDB实现了一个会话处理程序。它工作正常,除了当从服务器返回响应并且我在其上调用json_decode
时,嵌套的php序列化会话字符串被破坏。我假设在JSON对象中存储序列化会话是不兼容的?这是一个逃避问题吗?
问题:
- 有办法绕过这个吗
- 是否可以用JSON而不是我认为使用的php
serialize()
来序列化会话?这可能会解决问题
这就是原版从DB中出来时的样子(注意:它真的很长,所以我自己剪掉了结尾)
_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:"
在原件中星号所在的位置,它似乎被截断了。
json和序列化在PHP 中运行良好
class ClassA
{
public $publicMember;
private $privateMember;
protected $protected;
}
$object = new ClassA();
var_dump(unserialize(json_decode(json_encode(serialize($object)))));
但这个问题可能来自DynamoDB:PHP的DynamoDB/DynmoDB会话处理程序中的Bug(NULL BYTES的处理)。它似乎关闭了,但是。。。您可以在json_encode 之前使用base64_encode添加额外的包装
var_dump(unserialize(base64_decode(json_decode(json_encode(base64_encode(serialize($object)))))));