将Session $数据转换为数组?

时间:2011-12-09 13:47:45

标签: php session serialization

在会话保存处理程序的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。

2 个答案:

答案 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)