php - 将 session $data 转换为数组?

标签 php session serialization

在 session 保存处理程序的写入函数中,$data 以如下格式传递:

test|a:1:{s:3:"foo";s:3:"bar";}session|a: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]: Error at offset 0 of 95 bytes

它只返回 false。

最佳答案

关于另一个答案。 session_decode 的描述是“session_decode() 解码数据中的 session 数据,设置存储在 session 中的变量。”这听起来不像是你需要的......而且它总是在解析字符串后返回 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 );
}

关于php - 将 session $data 转换为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8446385/

相关文章:

php - 如何在 YII2 ActiveRecord 查询中说 (a AND b) OR (c AND d)?

php - 用变量替换占位符的有效方法

java - 当 session 在 servlet 中过期时自动重定向到登录页面

.net - 当 JSON 未反序列化为我的对象时如何抛出异常

php - 将(标题 LIKE 'A%' )更改为 B 或 C 等(重写)

php exec 如何查看进度

java - 在应用程序中维护两个不同 http 请求的 session 状态

php - 页面未重定向到具有正确用户名和密码的索引

mysql - MySql 数据库中的序列化数据可在商业智能工具中使用

.net - 删除根节点下的所有命名空间