Когда я хочу удалить файл 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