Удалить куки - PullRequest
       62

Удалить куки

231 голосов
/ 26 марта 2009

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

unset($_COOKIE['hello']);

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

Ответы [ 21 ]

269 голосов
/ 26 марта 2009

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

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

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

250 голосов
/ 14 ноября 2013

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

if (isset($_COOKIE['remember_user'])) {
    unset($_COOKIE['Hello']);
    unset($_COOKIE['HelloTest1']);
    setcookie('Hello', null, -1, '/');
    setcookie('HelloTest1', null, -1, '/');
    return true;
} else {
    return false;
}
207 голосов
/ 22 декабря 2012

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

if (isset($_COOKIE['key'])) {
    unset($_COOKIE['key']);
    setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}
23 голосов
/ 16 июля 2013

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

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

setcookie("hello", "", 1);
18 голосов
/ 26 марта 2009

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

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

// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);
13 голосов
/ 29 мая 2014

У меня была та же проблема в моем коде, и я обнаружил, что это проблема с файлом cookie. Посмотрите этот пост о переполнении стека: Невозможно удалить php set cookie

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

Установка cookie:

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

Очистка куки:

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

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

7 голосов
/ 26 марта 2009

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

6 голосов
/ 26 марта 2009

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

6 голосов
/ 09 апреля 2016

Вот как работает 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

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

3 голосов
/ 02 марта 2013

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

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

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

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

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

Но я заметил, что все устанавливают дату истечения срока годности, это необходимо и почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...