rya*_*zec 7 php session serialization
在会话保存处理程序的写入函数中,$ 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'
)
)
Run Code Online (Sandbox Code Playgroud)
我尝试将其传递给反序列化但我得到一个错误:
unserialize()[function.unserialize]:偏移量为0的95字节错误
它只是返回false.
关于另一个答案.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 );
}
Run Code Online (Sandbox Code Playgroud)