Çerez kaldırmak

11 Cevap php

Ben denemek bir Cookie kaldırmak istediğinizde

unset($_COOKIE['hello']);

Ben çerez hala varolduğunu firefox benim çerez tarayıcıda görmek. Nasıl gerçekten çerez kaldırabilirim?

11 Cevap

Bunu deneyin Mayıs

if (isset($_COOKIE['remember_user'])) {
            unset($_COOKIE['Hello']);
            unset($_COOKIE['HelloTest1']);
            setcookie('Hello', null, -1, '/');
            setcookie('HelloTest1', null, -1, '/');
            return true;
        } else {
            return false;
        }

Için "" değer ve dün son kullanma tarihini (ya da geçmişte herhangi bir tarih) ayarlayın

setcookie("hello", "", time()-3600);

Ardından çerez sonraki sayfanın yükler sona erecek.

Bir çerez silmek için temiz bir yolu $ _COOKIE değer ve tarayıcı çerez dosyasının hem temizlemek için:

if(isset($_COOKIE['key'])) {
  unset($_COOKIE['key']);
  setcookie('key', '', time() - 3600); // empty value and old timestamp
}

Bu sizin kod tanımlama unset, ancak $ _COOKIE değişkeni her istek yenilenir beri, sadece bir sonraki sayfa isteği üzerine geri geleceğiz.

Aslında çerez kurtulmak için, geçmişte son kullanma tarihini ayarlayın:

// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);

Eğer geçmişte sona erecek çerez ayarlarsanız, tarayıcı kaldıracaktır. Bkz setcookie() delete example at php.net

Istemci bilgisayarların ve genellikle sunucu farklıdır hangi kere var, çünkü güvenilir Eğer geçmişte sona erecek ayarlayın olmamalıdır bir çerezi silmek için, bu. En iyi uygulama, böylece gelecekte bir saniye sona boş bir çerez ile geçerli çerez üzerine yazmak için;

setcookie("hello", "", 1);

PHP docs "Example #2 setcookie() delete example" etiketli örnek bakın. Tarayıcıdan bir çerez temizlemek için, çerez doldu tarayıcı söylemek gerekir ... sonra tarayıcı kaldıracaktır. unset bunu sadece COOKIE diziden 'merhaba' çerez kaldırır kullandım gibi.

Çerezi silmek için sadece NULL değerini ayarlamanız gerekir:

"If you've set a cookie with nondefault values for an expiration time, path, or domain, you must provide those same values again when you delete the cookie for the cookie to be deleted properly." Quote from "Learning PHP5" book.

Yani bu kodu (benim için işleri) çalışması gerekir:

Setting the cookie: setcookie('foo', 'bar', time() + 60 * 5);

Deleting the cookie: setcookie('foo', '', time() + 60 * 5);

Ama herkes gerekli, ve bu yüzden, geçmişe son kullanma tarihi olduğunu ayarı olduğunu fark?

Yazabilirsiniz tüm çerezleri kaldırmak için:

foreach ($_COOKIE as $key => $value) {
    unset($value);
    setcookie($key, '', time() - 3600);
}

Sen çerez değerlere dayalı bir oturum değişkeni ayarlayabilirsiniz

session_start();

if(isset($_COOKIE['loggedin']) && ($_COOKIE['loggedin'] == "true") ){
$_SESSION['loggedin'] = "true";
}

echo ($_SESSION['loggedin'] == "true" ? "You are logged in" : "Please Login to continue");

i know that there a long time that this topic has been created but I have seen in theses solution one little mistake (I i can call it like that, because it's a detail.). I agree, the better solution is probably this solution:

if (isset($_COOKIE['remember_user'])) {
            unset($_COOKIE['Hello']);
            unset($_COOKIE['HelloTest1']);
            setcookie('Hello', null, -1, '/');
            setcookie('HelloTest1', null, -1, '/');
            return true;
        } else {
            return false;
        }

Ancak, mevcut durumda, hemen unset fonction çalıştığını ve unnset fonction işler değildir bu durumda yeni süresi dolan çerez oluşturmak her durumda çerezleri delet.

That means that even if the unset fonction works, it will still 2 cookies on the computer. The asked goal, in a logical point of view, is to delete the cookies if it is possible and if it really isn't, make it expire; to be the cleanest.

Yani, biz daha iyi yapmamız gerektiğini düşünüyorum:

if (isset($_COOKIE['remember_user'])) {
            setcookie('Hello', null, -1, '/');
            setcookie('HelloTest1', null, -1, '/');
            unset($_COOKIE['Hello']);
            unset($_COOKIE['HelloTest1']);
            return true;
        } else {
            return false;
        }

Teşekkür ve güzel bir gün :)