在PHP PHP中反序列化数组

时间:2015-04-06 09:31:21

标签: php arrays cookies serialization

我正在创建一个带有名称和值的cookie(序列化对象数组):

include_once './Model/Winkelwagenitem.php';

$winkelwagenProduct = array (
        //aantal + ID
        new WinkelwagenItem(1,257),
        new WinkelwagenItem(3,258),
        new WinkelwagenItem(1,259)
);    

$cookie_name = "winkelwagen";
$cookie_value = serialize($winkelwagenProduct);;
setcookie($cookie_name, $cookie_value); 

//echo "Data to be stored (serialized): ".$cookie_value."<br>";

if(!isset($_COOKIE[$cookie_name])){
        echo "Cookie not being set";
} else {
        echo "cookie created";
}
一切顺利。现在在另一个php文件中我访问这个cookie,我需要反序列化它并返回cookie中的对象:

 if(isset($_COOKIE["winkelwagen"])){
    echo "Deze cookie (".$_COOKIE["winkelwagen"].") bestaat";
    foreach ($_COOKIE["winkelwagen"] ....){
        .....
        unserialize(....)
        ....
    }
} else {
    echo "deze cookie bestaat niet";
}

我真的不知道foreach循环中会发生什么?

请帮忙吗?

2 个答案:

答案 0 :(得分:0)

我已经创建了一个Unserialize数组的函数,这里是函数:

function _unserialize($data)
{
    $data = @unserialize(strip_slashes($data));

    if (is_array($data))
    {
        foreach ($data as $key => $val)
        {
            if (is_string($val))
            {
                $data[$key] = str_replace('{{slash}}', '\\', $val);
            }
        }

        return $data;
    }

    return (is_string($data)) ? str_replace('{{slash}}', '\\', $data) : $data;
}

也许这会帮助你......

答案 1 :(得分:0)

您不需要迭代该Cookie变量。您存储在cookie中的内容只是一个值,因为您正在序列化。

因此,当您想要使用这些对象时,需要反序列化并使用。

您的代码应如下所示:

if(isset($_COOKIE["winkelwagen"])){
    //! You have your array of object here, use it as required
    $winkelwagenProduct = unserialize($_COOKIE["winkelwagen"]);
} else {
    echo "deze cookie bestaat niet";
}

几点提示:

  • 您需要在要反序列化的页面上包含WinkelwagenItem的类定义
  • Cookie的大小有限,不会存储大量的内容。
  • 客户端在每个HTTP请求中发送所有cookie。这意味着,cookie数据越重,每个HTTP请求就越重。所以不要在cookie中存储不必要的东西。