Yanıtlar:
Bunu deneyebilirsin
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['remember_user']);
setcookie('remember_user', null, -1, '/');
return true;
} else {
return false;
}
unset($_COOKIE['Hello']);
. Kaldırırsanız hiçbir şey değişmez.
unset($_COOKIE['Hello']);
, çerezi daha sonra kodda bir yerde kontrol edebiliyorsanız önemlidir.
Değeri "" ve son kullanma tarihini dün (veya geçmişte herhangi bir tarih) olarak ayarlayın
setcookie("hello", "", time()-3600);
Ardından, sayfanın bir sonraki yüklenmesi sırasında çerezin süresi dolar.
Bir çerezi silmenin temiz bir yolu, hem $_COOKIE
değeri hem de tarayıcı çerezi dosyasını temizlemektir :
if (isset($_COOKIE['key'])) {
unset($_COOKIE['key']);
setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}
setcookie
aramaya da yolu eklemeniz gerekir :setcookie('key', '', time() - 3600, '/');
unsetting
başarılı olduğunu merak ediyordum .
null
değerlerle var olan çerezleri önemseyen herkes için, değeri olan bir çerez bir çekle bulunamayacağı için bunun yerine array_key_exists () öğesini kullanmanız gerekir . null
isset()
Bir çerezi güvenilir bir şekilde silmek için, PHP sunucunuz tarafından hesaplandığı gibi, geçmişte herhangi bir zamanda sona erecek şekilde ayarlamak yeterli değildir. Bunun nedeni, istemci bilgisayarların sunucunuzdakinden farklı zamanlara sahip olabilmeleridir.
En iyi uygulama, mevcut çerezi , dönemin ardından (1 Ocak 1970 00:00:00 UTC) sonra gelecekte bir saniye süren boş bir çerezle üzerine yazmaktır:
setcookie("hello", "", 1);
Bu, kodunuzdaki çerezi unset edecektir, ancak her istekte $ _COOKIE değişkeni yenilendiğinden, bir sonraki sayfa isteğine geri dönecektir.
Tanımlama bilgisinden gerçekten kurtulmak için geçmişte son kullanma tarihini ayarlayın:
// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);
unset()
mu?
Kodumda aynı sorunu vardı ve bunun bir çerez yolu sorunu olduğunu gördüm. Bu yığın taşması gönderisine göz atın: Php set çerezi silinemiyor
Çerez "/" bir yol değeri kullanarak ayarlamıştı, ama temizlemeye çalıştığımda herhangi bir yol değeri yoktu, bu yüzden net değildi. İşte işe yarayan şeyin bir örneği:
Çerezin ayarlanması:
$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
Çerezi temizleme:
setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);
Umarım yardımcı olur.
Çerezi geçmişte sona erecek şekilde ayarlarsanız tarayıcı onu kaldırır. Php.net adresindeki setcookie () delete örneğine bakın
PHP belgelerinden " Örnek # 2 setcookie () silme örneği " etiketli örneğe bakın . Bir çerezi tarayıcıdan temizlemek için tarayıcıya çerezin süresinin dolduğunu söylemeniz gerekir ... tarayıcı daha sonra onu kaldıracaktır. unset
kullandığınız gibi 'merhaba' çerezini COOKIE dizisinden kaldırır.
PHP v7 setcookie () kodu şu şekilde çalışır:
<?php
setcookie('user_id','');
setcookie('session','');
?>
80 numaralı bağlantı noktasını koklarken, tcpdump çıktısından, sunucu istemciye (Tarayıcı) aşağıdaki HTTP başlıklarını gönderir:
Set-Cookie: user_id=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
Set-Cookie: session=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
Aşağıdaki isteklerdeki paketleri gözlemlemek Tarayıcı artık bu çerezleri başlıklara göndermiyor
Çerezi silmek için değeri NULL olarak ayarlamanız yeterlidir:
"Bir sona erme süresi, yol veya alan adı için varsayılan olmayan değerlere sahip bir çerez ayarladıysanız, çerezin düzgün bir şekilde silinmesi için çerezleri sildiğinizde aynı değerleri tekrar sağlamanız gerekir." "PHP5 Öğrenme" kitabından alıntı.
Yani bu kod çalışmalı (benim için çalışıyor):
Çerezin ayarlanması:
setcookie('foo', 'bar', time() + 60 * 5);
Çerezin silinmesi:
setcookie('foo', '', time() + 60 * 5);
Ama herkesin son kullanma tarihini geçmişe getirdiğini fark ettim, bu gerekli mi ve neden?
''
ile aynı şey değildir null
.
Yazabileceğiniz tüm çerezleri kaldırmak için:
foreach ($_COOKIE as $key => $value) {
unset($value);
setcookie($key, '', time() - 3600);
}
Çerezi "kaldırmak" istiyorsanız, son kullanma tarihini bir saat öncesine ayarlamanız yeterlidir:
setcookie ("TestCookie", "", time() - 3600);
veya
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);
Kaynak: http://www.php.net/manual/en/function.setcookie.php
Bu filter_input()
işlevi, bir ziyaretçinin girebileceği / değiştirebileceği tüm global kullanıcılar için kullanmalısınız :
$visitors_ip = filter_input(INPUT_COOKIE, 'id');
Bununla ilgili daha fazla bilgiyi buradan edinebilirsiniz: http://www.php.net/manual/en/function.filter-input.php burada: http://www.w3schools.com/php/func_filter_input.asp
Bu konunun yaratılmasından bu yana uzun zaman geçtiğini biliyorum, ancak bu çözümde küçük bir hata gördüm (buna böyle diyebilirim, çünkü bir detay). Daha iyi çözümün muhtemelen bu çözüm olduğuna katılıyorum:
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, bu durumda, unset işlevinin çalıştığı her durumda çerezleri siler ve unset işlevinin çalışmadığı durumlarda derhal yeni süresi dolmuş çerezler oluşturursunuz.
Bu, unset işlevi çalışsa bile, bilgisayarda hala 2 çerez olacağı anlamına gelir. Sorulan amaç, mantıklı bir bakış açısıyla, mümkünse çerezleri silmektir ve gerçekten değilse, süresinin dolmasını sağlayın; "en temiz" sonucu elde etmek için.
Yani, bence yapmalıyız:
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ürler ve iyi günler :)
$cookie_name = "my cookie";
$cookie_value = "my value";
$cookie_new_value = "my new value";
// Create a cookie,
setcookie($cookie_name, $cookie_value , time() + (86400 * 30), "/"); //86400 = 24 hours in seconds
// Get value in a cookie,
$cookie_value = $_COOKIE[$cookie_name];
// Update a cookie,
setcookie($cookie_name, $cookie_new_value , time() + (86400 * 30), "/");
// Delete a cookie,
setcookie($cookie_name, '' , time() - 3600, "/"); // time() - 3600 means, set the cookie expiration date to the past hour.
Çerezi mevcut alanınızdan tamamen silmek istiyorsanız, aşağıdaki kod kesinlikle size yardımcı olacaktır.
unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");
Bu kod, çerez değişkenini tüm alan adınızdan tamamen silecektir; "/" - çerez değişkeninin değerinin yalnızca geçerli alan veya yol için değil, tüm alan adı için ayarlandığı anlamına gelir. time () - 300, süresinin dolması için önceki bir süreye ayarlandığını belirtir.
Bu nasıl mükemmel bir şekilde silinir.
Çerez değerlerine dayalı olarak 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");
Bu özelleştirme işlevini kullanabilirsiniz:
function unset_cookie($cookie_name) {
if (isset($_COOKIE[$cookie_name])) {
unset($_COOKIE[$cookie_name]);
setcookie($cookie_name, null, -1);
} else { return false; }
}
$ _COOKIE ['user_account'] öğesini kaldırmak istiyorsanız.
Sadece kullan:
unset_cookie('user_account');
Zaman için girdiğinizde , tarayıcı için "şimdi" (şu andan itibaren + 0s aslında şimdi) 0
anlamına gelir ve çerezi siler.
setcookie("key", NULL, 0, "/");
Bana veren krom tarayıcıda kontrol ettim:
Name: key
Content: Deleted
Created: Sunday, November 18, 2018 at 2:33:14 PM
Expires: Sunday, November 18, 2018 at 2:33:14 PM
Ayarı kaldırmak için çerezin değerini ayarlamanız false
yeterlidir,
setcookie('cookiename', false);
PS: - Bunu yapmanın en kolay yolu.
Sunucunuzda php ve ayrıca tarayıcınız için js ile çerezleri silmek zorunda .. (Php ile yaptılar, ancak çerez dosyaları da tarayıcı istemcisinde):
Bir örnek:
if ($_GET['action'] == 'exit'){
// delete cookies with js and then in server with php:
echo '
<script type="text/javascript">
var delete_cookie = function(name) {
document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;";
};
delete_cookie("madw");
delete_cookie("usdw");
</script>
';
unset($_COOKIE['cookie_name']);
unset($_COOKIE['cookie_time']);
Çoğunuz bunun sadece yerel bir makinede çalışacağını unutuyorsunuz. Bir alanda bu örnek gibi bir desene ihtiyacınız olacaktır.
setcookie("example_cookie", 'password', time()-3600, "/", $_SERVER['SERVER_NAME']);
setcookie
localhost olsun veya olmasın, herhangi bir alan için çalışır.
$cookie->delete()
gelen github.com/delight-im/PHP-Cookie yararlı. Sorunun kodu, sunucu tarafında ayrıştırılan özelliği siler. Çerez hala istemci tarafında kalacak.