Çerez unset olmaz

8 Cevap php

Tamam, stumped ve saatlerce bu bakıyordu olmuştur.

Ben aşağıdaki kodu / erişim / login.php bir çerez koyuyorum:

setcookie('username', $username, time() + 604800, '/');

I / erişim / logout.php bulunan (ve / erişim / logout için yeniden), hangi çıkış çalıştığınızda, çerez unset gibi görünmüyor. Ben aşağıdakileri denedim:

setcookie('username', false, time()-3600, '/');

setcookie('username', '', time()-3600, '/');

setcookie('username', '', 1, '/');

Ben de doğrudan / erişim / logout.php vurmak için denedim, ama işe yaramıyor.

Hiçbir şey php günlükleri gösterir.

Herhangi bir öneriniz? Ben bir şey eksik, ya da ne oluyor emin değilim, ama bu kod bakarak ve hata ayıklama için çalışmakla saat oldu.

8 Cevap

Bir sunucu sorunu gibi görünüyor. Yeni etki alanı her hatayı gösterir iken benim son etki PHP hata işleme oldukça rahat oldu. Ben yan iki site yan kullanıyorum ve eski bir gerektiği gibi çerez kaldırır.

Burada timezone sorun belki var mı? Eğer time() - (3600*24) gibi, uzak geçmişte bir şey kullanarak ayarı denediniz mi? PHP'nin belgelerine çerezleri silme için iç uygulama geçmişte bir yıl damgası kullanır diyor.

Bu argüman isteğe beri Ayrıca, bir sona erme damgası geçirmeden sadece setcookie('username', false); kullanmak gerekir. Belki de dahil olmak üzere bu şekilde PHP kafa karıştırıcı?

Eğer uygulamanızda çerezleri verileri kullanmak nasıl?

Uygulama tanımlama değerini görmezden beri çerezleri okumak ve adı'' yanlış veya değil eğer kontrol ederseniz, o zaman yanlış ya da'' olarak ayarlayarak, yeterli olacaktır.

Sen daha iyi değer kullanıcı değişikliğini önlemek için, kurabiye değer bazı güvenlik koydu. Sen, CodeIgniter oturum kütüphane bakmak CI hash kullanarak tanımlama değerini korumak görebilirsiniz. Yetkisiz değer değişikliği algılandı ve çerezler silinecek.

Ayrıca, CI çerezleri öldürmek için bunu:

// Kill the cookie
    setcookie(
          $this->cookie_name,
          addslashes(serialize(array())),
          (time() - 31500000),
          $this->cookie_path,
          $this->cookie_domain,
          0
        );

Siz de javascript çerezleri silebilirsiniz. Burada kontrol http://www.php.net/manual/en/function.setcookie.php#96599

Bu unset olmadığını nasıl belirliyorsunuz? Setcookie () betik $ _COOKIE superglobalden kaldırmak değil aklınızda tutun, böylece print_r($_COOKIE); anında ardından unset setcookie () arayın ve eğer, hala senin kadar gösterecektir sayfayı yenileyin.

Eğer birden fazla cookie kaydedilmiş yok doğrulamak için tarayıcınızda yapıştırarak javascript:alert(document.cookie); sahipsiniz. Eğer taze başlangıç ​​emin yapmak için çalışıyoruz etki alanı için tüm çerezleri temizleyin. Ayrıca ini_set(E_ALL); herhangi bildirimleri eksik değil emin olun.

Basit ve kullanışlı bir yoludur, bu ek işlevleri kullanmak için:

function getCookie($name) {        
    if (!isset($_COOKIE[$name])) return false;
    if ($_COOKIE[$name]=='null') $_COOKIE[$name]=false;
    return $_COOKIE[$name];
}

function removeCookie($name) {
    unset($_COOKIE[$name]);
    setcookie($name, "null");
}

Bir çerez kaldırma basittir:

removeCookie('MyCookie');
....
echo getCookie('MyCookie');

Ben benzer bir sorunu vardı.

Ben hangi nedenle olursa olsun, logout.php dışında bir şey yankılanan aslında çerez silmek yapılan bulundu:

echo '{}';
setcookie('username', '', time()-3600, '/');

ham çerezleri kullanmayın, kimlik doğrulaması için oturum kullanmak

http://www.php.net/manual/en/book.session.php