Значение Cookie недоступно, почему? - PullRequest
0 голосов
/ 30 мая 2010

Я проверил это на своем компьютере разработчика, но теперь я загрузил все на рабочий сервер и не могу прочитать значение файла cookie.

Я думаю, что проблема заключается в сериализации и десериализации.

if (isset($_COOKIE['watched_ads'])){
    $expir = time()+1728000; //20 days
    $ad_arr = unserialize($_COOKIE['watched_ads']); // HERE IS THE PROBLEM
    $arr_elem = count($ad_arr);
    if (in_array($ad_id, $ad_arr) == FALSE){
        if ($arr_elem>10){
        array_shift($ad_arr);
        }
        $ad_arr[]=$ad_id;
        setcookie('watched_ads', serialize($ad_arr), $expir, '/');
    }
}

Когда я повторяю это: count ($ ad_arr) В этом случае я получаю ожидаемое nr, 1 , так что здесь есть значение. Но когда я повторяю значение: echo $ ad_arr [0]; , я ничего не получаю. Полностью пусто . Нет текста вообще.

У кого-нибудь есть подсказка?

если вам нужно больше информации о чем-то, дайте мне знать ...

Ответы [ 3 ]

0 голосов
/ 30 мая 2010

Оказывается, это были полоски, которые были нужны здесь.

Сначала сделал stripslashes (), и он сработал без сериализации cookie.

0 голосов
/ 30 мая 2010

Я бы предположил, что ваш $ ad_arr не массив. Вы можете проверить это с помощью функции is_array () или вызвав:

var_dump($ad_arr);

В выводе должен быть массив, а не строка (как уже упоминалось в Artefacto).

Еще один маленький совет:

Если вы хотите сохранить ассоциативный массив, вы можете использовать закодированную строку JSON, которую можно сохранить с помощью функции json_encode ():

setcookie('watched_ads', json_encode($ad_arr), $expir, '/');

А для загрузки данных вы можете использовать противоположную функцию json_decode ():

$ad_arr = json_decode($_COOKIE['watched_ads'], true);

Добавив true в качестве второго параметра, вы получите ассоциативный массив, а не объект. Использование формата JSON также является хорошей идеей для сохранения сложных данных в базе данных.

A и последний совет: "! In_array ()" работает так же хорошо, как "in_array () == FALSE"

0 голосов
/ 30 мая 2010

Вы должны понимать, что count возвращает 1 для большинства значений, не являющихся массивами, включая пустую строку.

> php
<?php
echo count("");
^Z
1

Итак, чтобы отладить его, попробуйте var_dump с самим суперглобальным $ _COOKIE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...