Çerez Değer mevcut değil, neden?

3 Cevap php

Benim geliştirme bilgisayarda bu test ettik, ama şimdi üretim sunucusuna şeyi yükledi ve ben çerez değerini okuyun cant.

Ben sorun Serileştirme ve Unserialization yatıyor düşünüyorum.

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, '/');
    }
}

Ben bu echo zaman: count($ad_arr) Bu durumda beklenen nr, 1 almak, yani bir değer orada var. Ben değerini echo Ama ne zaman: echo $ad_arr[0]; Ben bir şey olsun. Tamamen blank. Hiç yok metin.

Herkes bir ipucu var mı?

hakkında daha fazla bilgi gerekiyorsa bir şey bana bildirin ...

3 Cevap

Burada gerekli stripslashes meğerse.

A stripslashes () ilk yaptım ve çerez unserializing çalıştı.

Bunu anlamak gerektiğini boş bir dizeye dahil çoğu dizi olmayan değerleri için count döner 1,.

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

Yani, hata ayıklamak için, $ _COOKIE süper küresel kendisi ing 'var_dump deneyin.

Ben $ ad_arr hiçbir dizi olduğunu tahmin ediyorum. Sen "is_array ()" fonksiyonu ile veya çağırarak bu kontrol edebilirsiniz:

var_dump($ad_arr);

Bu çıktıda "dizi" ve (artefacto sadece önceden belirtildiği gibi) değil "dizesini" var Semester.

Başka bir küçük ipucu:

Eğer bir ilişkisel dizi saklamak istiyorsanız, json_encode () gunction kullanarak kaydedebilirsiniz hangi kullanımı kodlanmış bir JSON dize kullanabilirsiniz:

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

Ve veri yükleme Eğer tersi işlev json_decode kullanabilirsiniz ():

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

İkinci Paramtre gerçek olarak ekleyerek, bir ilişkisel dizi ve bir nesne alırsınız. JSON formatını kullanmak da bir veritabanı içinde karmaşık verilerin kaydedilmesi iyi bir fikirdir.

A ve son ipucu: "! In_array ()" "YANLIŞ ==) (İn_Array'in" kadar iyi çalışır