2015-04-06 3 views
1

Я в настоящее время создаю кук с именем и значение (сериализовать массив объектов):десериализируются массив в PHP печенья

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 я доступ к этому печенье и я должен десериализируются его и вернуть объекты, которые находятся в куки:

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

Я на самом деле не идея о том, что должно прийти в Еогеасп-цикле?

Помогите, пожалуйста?

+1

'$ _COOKIE [" winkelwagen "]' содержит только одно значение, для чего вам нужен цикл, почему бы не просто 'unserialize ($ _COOKIE [" winkelwagen "])'? – adeneo

+0

Другие объекты, которые будут добавлены – user3475797

+0

Как вы добавляете больше объектов в один и тот же ключ в cookie? Если вы имеете в виду добавить больше к сериализованному массиву, это не имеет значения, вы должны были бы перебирать их после того, как они были несертифицированы. – adeneo

ответ

0

Я создал функцию десериализации массива, здесь есть функция:

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; 
} 

Может быть, это поможет вам ...

0

Вам не нужно перебирать это переменное печенье , То, что вы храните в файле 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 ограничила размер, не храните что-то, что будет огромным.
  • Все файлы cookie отправляются каждым HTTP-запросом клиентом. Это означает, что чем тяжелее данные cookie, тем тяжелее будет каждый HTTP-запрос. Поэтому не храните ненужные вещи в файлах cookie.
Смежные вопросы