Web

Как удалить куки

Когда я хочу удалить файл cookie, я пытаюсь выполнить следующее:

unset($_COOKIE['hello']);

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

 

 Ответ 1

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

if (isset($_COOKIE['remember_user'])) {

    unset($_COOKIE['remember_user']); 

    setcookie('remember_user', null, -1, '/'); 

    return true;

} else {

    return false;

}

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

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

 Тогда срок действия cookie истечет при следующей загрузке страницы.

 

 Ответ 2

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

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

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

 

Ответ 3

У меня была такая же проблема в моем коде, и я обнаружил, что это проблема пути 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']);

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

 

Ответ 4

Вот как работает код 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 в заголовках.

 

Ответ 5

Если вы хотите полностью удалить cookie со всего вашего текущего домена, следующий код определенно вам поможет:

unset($_COOKIE['hello']);

setcookie("hello", "", time() - 300,"/");

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

Вот так он отлично удаляется.

 

Ответ 6

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

if (isset($_COOKIE['remember_user'])) {

            unset($_COOKIE['Hello']);

            unset($_COOKIE['HelloTest1']);

            setcookie('Hello', null, -1, '/');

            setcookie('HelloTest1', null, -1, '/');

            return true;

} else {

       return false;

}

 Но так вы удаляете куки в каждом случае, когда функция unset работает, и тут же создаете новые куки с истекшим сроком действия в случае, когда функция unset не работает. Это означает, что, даже если функция unset сработает, на компьютере все равно останется 2 cookie. С логической точки зрения, поставленная цель — удалить куки, если это возможно, а если это действительно невозможно — сделать их просроченными, чтобы получить самый «чистый» результат.

Поэтому, я думаю, лучше сделать так:

if (isset($_COOKIE['remember_user'])) {

            setcookie('Hello', null, -1, '/');

            setcookie('HelloTest1', null, -1, '/');

            unset($_COOKIE['Hello']);

            unset($_COOKIE['HelloTest1']);

            return true;

} else {

     return false;

}

 

Ответ 7

$cookie_name = "my cookie";

$cookie_value = "my value";

$cookie_new_value = "my new value";

// Создание cookie,

setcookie($cookie_name, $cookie_value , time() + (86400 * 30), "/"); //86400 = 24 hours in seconds

// Получение значения cookie,

$cookie_value = $_COOKIE[$cookie_name];

// Обновление cookie,

setcookie($cookie_name, $cookie_new_value , time() + (86400 * 30), "/");

// Удаление cookie,

setcookie($cookie_name, '' , time() - 3600, "/"); // time() - 3600 означает установку даты истечения срока действия cookie на последний час.

 

Ответ 8

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

Пример:

if ($_GET['action'] == 'exit'){

            // удаляем куки с помощью js, а затем на сервере с помощью 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']);

Схожие статьи

Идеи и полезные книги по разработке высоконагруженных web-сервисов
Web

Идеи и полезные книги по разработке высоконагруженных web-сервисов

Web

Как я могу обезопасить вводимые пользователем данные с помощью PHP?

Web

Отладка Curl в PHP

Web

Как использовать тернарный оператор (?:) в PHP как сокращение «if/else»