将Session $数据转换为数组?

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.

mis*_*shu 8

关于另一个答案.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)

  • 经过5个小时的搜索,终于这个起作用了,非常感谢 (2认同)