Kiedy chcę usunąć plik cookie, próbuję
unset($_COOKIE['hello']);
Widzę w przeglądarce plików cookie firmy Firefox, że plik cookie nadal istnieje. Jak mogę naprawdę usunąć plik cookie?
Kiedy chcę usunąć plik cookie, próbuję
unset($_COOKIE['hello']);
Widzę w przeglądarce plików cookie firmy Firefox, że plik cookie nadal istnieje. Jak mogę naprawdę usunąć plik cookie?
Odpowiedzi:
Możesz tego spróbować
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['remember_user']);
setcookie('remember_user', null, -1, '/');
return true;
} else {
return false;
}
unset($_COOKIE['Hello']);
. Nic nie zmieni, jeśli go usuniesz.
unset($_COOKIE['Hello']);
jest naprawdę ważne, jeśli możesz sprawdzić plik cookie gdzieś później w kodzie.
Ustaw wartość na „”, a datę wygaśnięcia na wczoraj (lub dowolną datę z przeszłości)
setcookie("hello", "", time()-3600);
Następnie plik cookie wygaśnie przy następnym ładowaniu strony.
Prostym sposobem na usunięcie pliku cookie jest wyczyszczenie zarówno $_COOKIE
pliku wartości, jak i pliku cookie przeglądarki:
if (isset($_COOKIE['key'])) {
unset($_COOKIE['key']);
setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}
setcookie
wywołania:setcookie('key', '', time() - 3600, '/');
unsetting
udało się.
null
wartościami, należy zamiast tego użyć array_key_exists () , ponieważ plik cookie z null
wartością nie zostanie znaleziony przez isset()
czek.
Aby niezawodnie usunąć plik cookie, nie wystarczy ustawić, aby wygasł w dowolnym momencie w przeszłości, zgodnie z obliczeniami serwera PHP. Wynika to z faktu, że komputery klienckie mogą i często mają czasy inne niż czasy twojego serwera.
Najlepszym rozwiązaniem jest, aby zastąpić bieżący plik cookie z pustego pliku cookie, który wygasa jedną sekundę w przyszłości po epoce (1 stycznia 1970 00:00:00 UTC), a więc:
setcookie("hello", "", 1);
Spowoduje to rozbrojenie pliku cookie w kodzie, ale ponieważ zmienna $ _COOKIE jest odświeżana przy każdym żądaniu, po prostu wróci do żądania na następnej stronie.
Aby faktycznie pozbyć się ciasteczka, ustaw datę ważności w przeszłości:
// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);
unset()
plik cookie nie jest potrzebny ?
Miałem ten sam problem w kodzie i stwierdziłem, że był to problem ze ścieżką pliku cookie. Sprawdź ten post przepełnienia stosu: Nie można usunąć pliku cookie zestawu php
Ustawiłem ciasteczko przy użyciu wartości ścieżki „/”, ale nie miałem żadnej wartości ścieżki, gdy próbowałem go wyczyścić, więc nie wyczyściło się. Oto przykład tego, co zadziałało:
Ustawienie ciasteczka:
$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
Czyszczenie ciasteczka:
setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);
Mam nadzieję, że to pomaga.
Jeśli plik cookie wygasa w przeszłości, przeglądarka go usunie. Zobacz przykład usuwania setcookie () na php.net
Zobacz przykład z etykietą „ Przykład # 2 przykład usuwania setcookie () ” z dokumentacji PHP. Aby usunąć plik cookie z przeglądarki, musisz poinformować przeglądarkę, że plik cookie wygasł ... przeglądarka usunie go. unset
po jego użyciu po prostu usuwa ciasteczko „hello” z tablicy COOKIE.
Oto jak działa kod setcookie () PHP v7, gdy wykonujesz:
<?php
setcookie('user_id','');
setcookie('session','');
?>
Z danych wyjściowych programu tcpdump podczas wąchania portu 80 serwer wysyła do klienta (przeglądarki) następujące nagłówki HTTP:
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
Obserwując pakiety w następujących żądaniach, przeglądarka nie wysyła już tych plików cookie w nagłówkach
Aby usunąć plik cookie, wystarczy ustawić wartość NULL:
„Jeśli ustawiłeś plik cookie z wartościami domyślnymi dla czasu wygaśnięcia, ścieżki lub domeny, musisz podać te same wartości ponownie po usunięciu pliku cookie, aby plik cookie został poprawnie usunięty”. Cytat z książki „Nauka PHP5”.
Więc ten kod powinien działać (działa dla mnie):
Ustawienie ciasteczka:
setcookie('foo', 'bar', time() + 60 * 5);
Usuwanie ciasteczka:
setcookie('foo', '', time() + 60 * 5);
Zauważyłem jednak, że wszyscy ustawiają datę ważności na przeszłość, czy jest to konieczne i dlaczego?
''
nie jest tym samym, co null
.
Aby usunąć wszystkie pliki cookie, możesz napisać:
foreach ($_COOKIE as $key => $value) {
unset($value);
setcookie($key, '', time() - 3600);
}
Po prostu ustaw datę ważności na godzinę temu, jeśli chcesz „usunąć” plik cookie, w ten sposób:
setcookie ("TestCookie", "", time() - 3600);
lub
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);
Źródło: http://www.php.net/manual/en/function.setcookie.php
Powinieneś użyć tej filter_input()
funkcji dla wszystkich globali, do których użytkownik może wchodzić / manipulować, w następujący sposób:
$visitors_ip = filter_input(INPUT_COOKIE, 'id');
Możesz przeczytać więcej na ten temat tutaj: http://www.php.net/manual/en/function.filter-input.php i tutaj: http://www.w3schools.com/php/func_filter_input.asp
Wiem, że minęło dużo czasu, odkąd ten temat został stworzony, ale widziałem mały błąd w tym rozwiązaniu (mogę to tak nazwać, ponieważ jest to szczegół). Zgadzam się, że lepszym rozwiązaniem jest prawdopodobnie to rozwiązanie:
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
return true;
} else {
return false;
}
Ale w tym przypadku usuwasz pliki cookie w każdym przypadku, w którym działa funkcja rozbrojenia i natychmiast tworzysz nowe pliki cookie, które wygasły, na wypadek, gdyby funkcja rozbrojenia nie działała.
Oznacza to, że nawet jeśli funkcja nieuzbrojona działa, nadal będzie mieć 2 pliki cookie na komputerze. Zadanym celem, z logicznego punktu widzenia, jest usunięcie plików cookie, jeśli jest to możliwe, a jeśli tak naprawdę nie jest, spowodowanie wygaśnięcia; aby uzyskać „najczystszy” wynik.
Myślę więc, że powinniśmy lepiej:
if (isset($_COOKIE['remember_user'])) {
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
return true;
} else {
return false;
}
Dziękuję i miłego dnia :)
$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.
Jeśli chcesz całkowicie usunąć plik cookie z całej bieżącej domeny, poniższy kod na pewno Ci pomoże.
unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");
Ten kod całkowicie usunie zmienną cookie z całej domeny, tj. „/” - oznacza wartość tej zmiennej pliku cookie ustawioną dla wszystkich domen, a nie tylko dla bieżącej domeny lub ścieżki. time () - 300 oznacza, że ustawia się na poprzedni czas, więc wygaśnie.
To jest jak idealnie usunięte.
Możesz ustawić zmienną sesji na podstawie wartości plików cookie
session_start();
if(isset($_COOKIE['loggedin']) && ($_COOKIE['loggedin'] == "true") ){
$_SESSION['loggedin'] = "true";
}
echo ($_SESSION['loggedin'] == "true" ? "You are logged in" : "Please Login to continue");
Możesz po prostu użyć tej funkcji dostosowywania:
function unset_cookie($cookie_name) {
if (isset($_COOKIE[$cookie_name])) {
unset($_COOKIE[$cookie_name]);
setcookie($cookie_name, null, -1);
} else { return false; }
}
Jeśli chcesz usunąć $ _COOKIE ['user_account'].
Po prostu użyj:
unset_cookie('user_account');
Po wprowadzeniu 0
czasu masz na myśli „teraz” (+ 0 od teraz jest teraz) dla przeglądarki i usuwa ciasteczko.
setcookie("key", NULL, 0, "/");
Sprawdziłem to w przeglądarce Chrome, która daje mi:
Name: key
Content: Deleted
Created: Sunday, November 18, 2018 at 2:33:14 PM
Expires: Sunday, November 18, 2018 at 2:33:14 PM
Wystarczy ustawić wartość pliku cookie false
, aby go rozbroić,
setcookie('cookiename', false);
PS: - To najłatwiejszy sposób na zrobienie tego.
Musisz usunąć pliki cookie z php na swoim serwerze, a także z js dla przeglądarki. (Dokonały one z php, ale pliki cookie są również w kliencie przeglądarki):
Przykład:
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']);
Większość z was zapomina, że zadziała to tylko na komputerze lokalnym. W domenie będziesz potrzebować wzorca takiego jak ten przykład.
setcookie("example_cookie", 'password', time()-3600, "/", $_SERVER['SERVER_NAME']);
setcookie
działa dla dowolnej domeny, czy to localhost czy nie.
$cookie->delete()
ze github.com/delight-im/PHP-Cookie pomocny. Kod z pytania po prostu usuwa właściwość, która została przeanalizowana po stronie serwera. Plik cookie będzie nadal dostępny po stronie klienta.