Удалить куки

когда я хочу удалить Cookie, я пытаюсь

unset($_COOKIE['hello']);

Я вижу в своем браузере cookie из firefox, что файл cookie все еще существует. Как я могу удалить cookie?

20 ответов


вы можете попробовать этот

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

установите значение "" и дату истечения срока действия вчера (или любую дату в прошлом)

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

затем cookie истекает при следующей загрузке страницы.


чистый способ удалить cookie-это очистить оба из $_COOKIE значение и файл cookie браузера:

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

это отменит cookie в вашем коде, но так как переменная $_COOKIE обновляется при каждом запросе, она просто вернется при следующем запросе страницы.

чтобы фактически избавиться от cookie, установите дату истечения срока действия в прошлом:

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

чтобы надежно удалить cookie, недостаточно установить его срок действия в любое время в прошлом, как вычисляется вашим PHP-сервером. Это связано с тем, что клиентские компьютеры могут и часто имеют время, которое отличается от вашего сервера.

рекомендуется перезаписать текущий файл cookie пустым файлом cookie, срок действия которого истекает через одну секунду в будущем после эпохи (1 января 1970 00:00:00 UTC), как так:

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

у меня была такая же проблема в моем коде и обнаружил, что это проблема пути cookie. Проверьте это сообщение переполнения стека:не удается удалить PHP set cookie

Я установил cookie, используя значение пути"/", но не имел никакого значения пути, когда я пытался очистить его, поэтому он не очистился. Итак, вот пример того, что сработало:

настройка cookie:

$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);

очистка cookie:

setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);

надеюсь, что это поможет.


Если вы установили срок действия cookie в прошлом, браузер удалит его. См.setcookie () удалить пример в php.net


см. образец с надписью"Пример #2 setcookie () удалить пример " из документов PHP. Чтобы удалить файл cookie из браузера, необходимо сообщить браузеру, что срок действия файла cookie истек... затем браузер удалит его. unset поскольку вы использовали его, он просто удаляет файл cookie "hello" из массива COOKIE.


вот как работает код PHP V7 setcookie (), когда вы делаете:

<?php
    setcookie('user_id','');
    setcookie('session','');
?>

из вывода tcpdump при обнюхивании порта 80 сервер отправляет клиенту (браузеру) следующие 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

наблюдение за пакетами в следующих запросах браузер больше не отправляет эти куки в заголовках


чтобы удалить cookie, вам просто нужно установить значение NULL:

" Если вы установили файл cookie со значениями nondefault для времени истечения срока действия, пути или домена, вы должны предоставить те же значения снова при удалении файла cookie, чтобы файл cookie был удален правильно." Цитата из книги "изучение PHP5".

поэтому этот код должен работать(работает для меня):

настройка cookie: setcookie('foo', 'bar', time() + 60 * 5);

удаление файла cookie: setcookie('foo', '', time() + 60 * 5);

но я заметил то, что каждый устанавливает дату истечения срока действия в прошлое, это необходимо и почему?


чтобы удалить все куки, вы можете написать:

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

просто установите дату истечения срока действия на один час назад, если вы хотите "удалить" cookie, например:

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

или

setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);

источник:http://www.php.net/manual/en/function.setcookie.php

вы должны использовать filter_input() функция для всех глобалов, которые посетитель может ввести / манипулировать, например:

$visitors_ip = filter_input(INPUT_COOKIE, 'id');

вы можете прочитать больше об этом здесь: http://www.php.net/manual/en/function.filter-input.php и здесь: http://www.w3schools.com/php/func_filter_input.asp


Я знаю, что эта тема была создана давно, но я видел небольшую ошибку в этом решении (я могу назвать это так, потому что это деталь). Я согласен, что лучшим решением, вероятно, является это решение:

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

но в данном случае вы удаляете файлы cookie в каждом случае, когда функция unset работает, и сразу же создаете новые файлы cookie с истекшим сроком действия, если функция unset не работает.

это означает, что даже если функция unset работает, она по-прежнему будет иметь 2 cookies на компьютере. С логической точки зрения, заданная цель состоит в том, чтобы удалить куки, если это возможно, а если это действительно не так, сделайте его истекающим; чтобы получить "самый чистый" результат.

Итак, я думаю, нам лучше сделать:

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

спасибо и хорошего дня:)


$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.

Это просто!

setcookie("cookiename", "cookievalue", 1);

вы можете установить переменную сеанса на основе значений 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");

Вы можете просто использовать эту настройку функции:

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'].
Просто используйте:

unset_cookie('user_account');

Если вы хотите полностью удалить файл cookie из всего текущего домена, вам обязательно поможет следующий код.

unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");

этот код полностью удалит переменную cookie из всего вашего домена i.e; " / " - это означает, что значение переменной cookie установлено для всего домена, а не только для текущего домена или пути. time () - 300 означает, что он устанавливается в предыдущее время, поэтому он истечет.

вот как он идеально удален.


вы должны удалить куки с php на вашем сервере, а также с js для Вашего браузера.. (Они сделали с php, но файлы cookie также находятся в клиенте браузера):

пример:

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']);

большинство из вас забывают, что это будет работать только на локальной машине. В домене вам понадобится шаблон, подобный этому примеру.

setcookie("example_cookie", 'password', time()-3600, "/", $_SERVER['SERVER_NAME']);