Ответы:
Вы можете попробовать это
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['remember_user']);
setcookie('remember_user', null, -1, '/');
return true;
} else {
return false;
}
unset($_COOKIE['Hello']);
. Это ничего не изменит, если вы удалите его.
unset($_COOKIE['Hello']);
действительно важен, если вы можете проверить cookie где-нибудь позже в коде.
Установите значение «» и дату истечения срока до вчерашнего дня (или любую дату в прошлом)
setcookie("hello", "", time()-3600);
Тогда срок действия файла cookie истечет при следующей загрузке страницы.
Чистый способ удалить cookie - это очистить как $_COOKIE
файл cookie, так и файл cookie браузера:
if (isset($_COOKIE['key'])) {
unset($_COOKIE['key']);
setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}
setcookie
вызов:setcookie('key', '', time() - 3600, '/');
unsetting
успешно.
null
значениями, вам нужно будет использовать array_key_exists () , поскольку куки со null
значением не будут найдены isset()
проверкой.
Чтобы надежно удалить 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);
unset()
в печенье?
У меня была та же проблема в моем коде, и я обнаружил, что это проблема с файлами cookie. Проверьте этот пост переполнения стека: Не могу удалить php set 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
Смотрите пример с пометкой « Пример # 2 пример удаления setcookie () » из документации PHP. Чтобы удалить cookie из браузера, необходимо сообщить браузеру, что срок действия файла cookie истек ... браузер затем удалит его. unset
поскольку вы использовали его, он просто удаляет «привет» cookie из массива 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 со значениями, отличными от значений по умолчанию, в течение срока действия, пути или домена, вы должны снова указать эти же значения при удалении файла cookie, чтобы файл cookie был удален должным образом». Цитата из книги "Изучение PHP5".
Так что этот код должен работать (работает для меня):
Установка куки:
setcookie('foo', 'bar', time() + 60 * 5);
Удаление куки:
setcookie('foo', '', time() + 60 * 5);
Но я заметил, что все устанавливают дату истечения срока годности, это необходимо и почему?
''
- это не то же самое, что null
.
Чтобы удалить все куки, вы можете написать:
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 в каждом случае, когда работает функция отмены установки, и сразу же создаете новые файлы 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;
}
Спасибо, и хорошего дня :)
$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.
Если вы хотите полностью удалить куки со всего вашего текущего домена, то следующий код определенно вам поможет.
unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");
Этот код полностью удалит переменную cookie со всего вашего домена, т.е. «/» - это значение переменной cookie, установленное для всего домена, а не только для текущего домена или пути. time () - 300 означает, что он устанавливает предыдущее время, поэтому срок его действия истекает.
Вот как это отлично удалено.
Вы можете установить переменную сеанса на основе значений 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');
Когда вы вводите 0
время, вы имеете в виду «сейчас» (+ 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 false
, чтобы сбросить его,
setcookie('cookiename', false);
PS: - Это самый простой способ сделать это.
Вы должны удалить куки с 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']);
setcookie
работает для любого домена, локального или нет.
$cookie->delete()
из github.com/delight-im/PHP-Cookie полезного. Код из вопроса просто удаляет свойство, которое было проанализировано на стороне сервера. Cookie все еще будет храниться на стороне клиента.