Cookie值不可用,为什么?

时间:2010-05-30 19:34:40

标签: php cookies

我已经在我的开发计算机上对此进行了测试,但现在我已将所有内容上传到生产服务器,但我无法读出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 :(得分:0)

您应该了解count为大多数非数组值返回1,包括空字符串。

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

因此,要调试它,请尝试var_dump'$ _COOKIE超全局本身。

答案 1 :(得分:0)

原来这是需要的striplashes。

首先使用stripslashes(),然后对cookie进行反序列化。

答案 2 :(得分:0)

我猜,你的$ 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”一样好用