我已经在我的开发计算机上对此进行了测试,但现在我已将所有内容上传到生产服务器,但我无法读出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]; 我什么都没得到。完全空白。完全没有文字。
有人有线索吗?
如果您需要更多关于某事的信息,请告诉我......
答案 0 :(得分:0)
答案 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”一样好用