Удалить куки
Когда я хочу удалить Cookie, я пытаюсь
unset($_COOKIE['hello']);
В браузере файлов cookie от Firefox я вижу, что файл cookie все еще существует. Как я могу действительно удалить куки?
26 ответов
Вы можете попробовать это
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-файл, недостаточно установить срок его действия в любое время в прошлом, как рассчитывает ваш PHP-сервер. Это связано с тем, что на клиентских компьютерах время от времени может отличаться от времени вашего сервера.
Рекомендуется перезаписать текущий файл cookie пустым файлом cookie, срок действия которого истекает через одну секунду в будущем после эпохи (1 января 1970 года, 00:00:00 UTC), например:
setcookie("hello", "", 1);
Это приведет к удалению файла cookie в вашем коде, но, поскольку переменная $_COOKIE обновляется при каждом запросе, он просто возвращается при запросе следующей страницы.
Чтобы на самом деле избавиться от куки, установите дату истечения срока действия в прошлом:
// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);
У меня была та же проблема в моем коде, и я обнаружил, что это проблема с файлами 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']);
Надеюсь, это поможет.
Если вы установили истечение срока действия cookie в прошлом, браузер удалит его. Смотрите setcookie() пример удаления на php.net
Вот как работает 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 на false
чтобы его сбить,
setcookie('cookiename', false);
PS:- Это самый простой способ сделать это.
Смотрите пример с пометкой " Пример #2 пример удаления setcookie() " из документации PHP. Чтобы удалить cookie из браузера, необходимо сообщить браузеру, что срок действия файла cookie истек... браузер затем удалит его. unset
поскольку вы использовали его, он просто удаляет "привет" cookie из массива COOKIE.
Если вы хотите полностью удалить куки со всего вашего текущего домена, то следующий код определенно вам поможет.
unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");
Этот код полностью удалит переменную cookie из всего вашего домена, т.е. " / " - это значение переменной cookie, установленное для всего домена, а не только для текущего домена или пути. time() - 300 означает, что он устанавливает предыдущее время, поэтому срок его действия истекает.
Вот как это отлично удаляется.
Чтобы удалить cookie, вам просто нужно установить значение NULL:
"Если вы установили файл cookie со значениями, отличными от значений по умолчанию, на время истечения срока действия, путь или домен, вы должны снова указать эти же значения при удалении файла cookie для правильного удаления файла cookie". Цитата из книги "Изучение PHP5".
Так что этот код должен работать (работает для меня):
Установка куки:setcookie('foo', 'bar', time() + 60 * 5);
Удаление куки:setcookie('foo', '', time() + 60 * 5);
Но я заметил, что все устанавливают дату истечения срока годности, это необходимо и почему?
Чтобы удалить все куки, вы можете написать:
foreach ($_COOKIE as $key => $value) {
unset($value);
setcookie($key, '', time() - 3600);
}
Я знаю, что прошло много времени с тех пор, как эта тема была создана, но я видел небольшую ошибку в этом решении (я могу назвать это так, потому что это деталь). Я согласен, что лучшее решение, вероятно, это решение:
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 в каждом случае, когда работает функция отмены установки, и сразу же создаете новые файлы cookie с истекшим сроком действия в случае, если функция отмены не работает.
Это означает, что даже если функция unset сработает, у нее все равно будет 2 куки на компьютере. Запрашиваемая цель, с логической точки зрения, состоит в том, чтобы удалить куки, если это возможно, и если это действительно так, сделать так, чтобы срок их действия истек; чтобы получить "самый чистый" результат.
Итак, я думаю, что нам лучше сделать:
if (isset($_COOKIE['remember_user'])) {
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
return true;
} else {
return false;
}
Спасибо и хорошего дня:)
Когда вы вводите 0
для времени вы имеете в виду "сейчас" для браузера.
setcookie("key", NULL, 0, "/");
Я проверил это в браузере Chrome, который дает мне:
Name: key
Content: Deleted
Created: Sunday, November 18, 2018 at 2:33:14 PM
Expires: Sunday, November 18, 2018 at 2:33:14 PM
Просто установите срок годности на один час назад, если вы хотите "удалить" 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
$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.
Я обнаружил, что в Chrome невозможно удалить файл cookie, если вы не укажете последние три параметра в файле cookie... Домен, безопасный и только http...
if (isset($_COOKIE['user_id'])) {
unset($_COOKIE['user_id']);
setcookie("user_id", "", time() - 3600, "/", 'yourdomain.com',true,true);
header('Location: /');
} else {
/* other code here */
}
Вот как я заставил это работать на меня. Прочтите документацию: Все о файлах cookie на официальном сайте PHP
Вы можете установить переменную сеанса на основе значений 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');
setcookie('key', '', time() - 3600, '/')
может не работать, если время клиента указано неправильно. Более простой в использовании:
setcookie('key', '', 1, '/');
Ссылка: примечания к участию пользователей на https://www.php.net/manual/en/function.setcookie.php .
Вы можете использоватьunset
илиsetcookie
unset($_COOKIE['MYCOOKIE']);
//
setcookie('MYCOOKIE', '', -1, '/');
Я предпочитаю проверить сisset
и тогдаunset or setcookie
if(isset($_COOKIE['MYCOOKIE'])) { unset($_COOKIE['MYCOOKIE']); }
//
if(isset($_COOKIE['MYCOOKIE'])) { setcookie('MYCOOKIE', '', -1, '/'); }
кажется, это тоже работает, но, по моему мнению, не используйте его
setcookie('MYCOOKIE', '', -1, '/') ?? '';
!isset($_COOKIE['MYCOOKIE']) ?: setcookie('MYCOOKIE', '', -1, '/');
Я использовал это в php , и он работал нормально.
function cookie_unset()
{
setcookie("cookie_name", "", time() - 3600, '/');
unset ($_COOKIE['cookie_name']);
//done
}
Вы должны удалить куки с 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']);