我有一个扩展PdoSessionStorage的自定义类,但我不知道如何从会话中捕获属性以将它们保存为数据库中的独立字段。
其他可能性是在我的自定义PdoSessionStorage类的sessionWrite($ if,$ data)方法中反序列化会话数据。但我不知道如何反序列化$ data字符串以获取我想要的数据。
我试过了:
unserialize($data);
这给我发了以下错误:
致命错误:未捕获异常'ErrorException',带有消息'注意:unserialize()[function.unserialize]:/myserver / myapp / src / app / myBundle / myCustomPdoSessionStorage.php第220行中偏移量为0的82字节错误在/myserver/myapp/vendor/symfony/src/Symfony/Component/HttpKernel/Debug/ErrorHandler.php:65堆栈跟踪:#0 [内部函数]:Symfony \ Component \ HttpKernel \ Debug \ ErrorHandler-> handle(8 ,'unserialize()[...','/ Applications / M ...',220,Array)#1 /myserver/myapp/src/app/myBundle/myCustomPdoSessionStorage.php(220):unserialize('_ symfony2 | a:3:{...')#2 [内部函数]:app / myBundle / myCustomPdoSessionStorage-> sessionWrite('72b823b39d316dd ...','_ _ symfony2 | a:3:{...')#3 {在第65行的/myserver/myapp/vendor/symfony/src/Symfony/Component/HttpKernel/Debug/ErrorHandler.php中抛出
有人可以帮我吗?
答案 0 :(得分:2)
你在这里使用了错误的功能。 unserialize
用于序列化值,但不用于会话。即使这两者彼此接近,它们也是不同的。
您可能正在寻找session_decode
功能。注意它反序列化到$_SESSION
超全局,所以你可能想要包装它:
function unserialize_session($data) {
$hasBuffer = isset($_SESSION);
$hasBuffer && $buffer = $_SESSION;
session_decode($data);
$session = $_SESSION;
$hasBuffer ? $_SESSION = $buffer : unset($_SESSION);
return $session;
}
对应方是session_encode
,其工作方式类似。
答案 1 :(得分:1)
我找到了它!
我的CustomPdoSessionStorage
类扩展了NativeSessionStorage
,它管理$_SESSION
数组(读,写等)。
所以,从我的课程中我可以使用$this->read('userId')
并将其存储在我的数据库中。
非常感谢@hakre