在会话保存处理程序的write函数中,$ data以如下格式传递:
测试|一个:1:{S:3: “foo” 的; S:3: “棒”;}会话|一个:2:{S:10: “isLoggedIn”; B:1; S:8: “的clientId”; S:5:“12345 “;}
有没有办法将其转换为适当的数组:
array
(
'test' => array
(
'foo' => 'bar'
)
'session' => array
(
'isLoggedIn' => true
'clientId' => '12345'
)
)
我尝试将其传递给反序列化但我收到错误:
unserialize()[function.unserialize]:偏移0为95字节时出错
它只是返回false。
答案 0 :(得分:7)
关于另一个答案。 session_decode的描述是“session_decode()解码数据中的会话数据,设置存储在会话中的变量。”这听起来不像你需要的那样..而且它在解析字符串后也总会返回bool。
另一方面,如果您提供的字符串作为示例有错误,“12345”之后的空格(并且它看起来像是一个错误,因为在它之前您可以看到以下值应该是一个字符串长度5)你可以使用这个功能:
function unserialize_session_data( $serialized_string )
{
$variables = array();
$a = preg_split( "/(\w+)\|/", $serialized_string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE );
for( $i = 0; $i<count($a); $i = $i+2 )
{
if(isset($a[$i+1]))
{
$variables[$a[$i]] = unserialize( $a[$i+1] );
}
}
return( $variables );
}
答案 1 :(得分:3)