Вы можете найти $cookie->delete()из github.com/delight-im/PHP-Cookie полезного. Код из вопроса просто удаляет свойство, которое было проанализировано на стороне сервера. Cookie все еще будет храниться на стороне клиента.
Я понимаю, что это пример, но, пожалуйста, никогда не храните имя пользователя или пароль в файлах cookie.
Тамасд
3
Это бессмысленно unset($_COOKIE['Hello']);. Это ничего не изменит, если вы удалите его.
машинный приговор
30
@machineaddict unset($_COOKIE['Hello']);действительно важен, если вы можете проверить cookie где-нибудь позже в коде.
Андреас Халтгрен
4
работает нормально, но при попытке перезагрузить страницу. он видел набор файлов cookie со старыми данными, почему?
Нилеш Патель
9
======= НЕ РАБОТАЕТ В ХРОМЕ ======= Я попробовал этот код сегодня, и когда я захожу на сайт с помощью Google Chrome, а затем захожу в инструменты разработчика в Chrome, я вижу, что время истечения устанавливается на 1 секунду до начала эпохи (например, 1969-12-31 23:59:59), однако, когда я в следующий раз отправляю страницу, файл cookie отправляется на сервер. Когда я изменил -1 на 1 (например, 1970-01-01 00:00:01), чтобы дать следующую команду: setcookie ('Hello', null, 1, '/'); Затем Chrome действовал, как и ожидалось, и не отправил печенье
Питер Хиндс
284
Установите значение «» и дату истечения срока до вчерашнего дня (или любую дату в прошлом)
setcookie("hello","", time()-3600);
Тогда срок действия файла cookie истечет при следующей загрузке страницы.
Если вы поставили дату слишком далеко в прошлом, IE будет ее лаять и игнорировать, то есть значение не будет удалено.
Julien
52
@strager В руководстве говорится: Если установлено значение 0 или не указано, срок действия файла cookie истекает в конце сеанса (когда браузер закрывается). Это не совсем удаление куки. Я действительно не знаю, будет ли IE делать то, что сказал Жюльен, но более чем возможно, что IE сделает что-то странное.
Яннис
31
Кроме того, не забудьте также сбросить ($ _ COOKIE ["hello"]), потому что если на остальной части страницы есть код, который смотрит на $ _COOKIE ["hello"], он все равно найдет его установленным. Я только что получил немного от этого.
Магматик
12
Кроме того, неплохо было бы установить путь, поэтому setcookie ('hello', '', time () - 3600, '/');
Стефан Вайнхолд,
227
Чистый способ удалить cookie - это очистить как $_COOKIEфайл cookie, так и файл cookie браузера:
if(isset($_COOKIE['key'])){
unset($_COOKIE['key']);
setcookie('key','', time()-3600,'/');// empty value and old timestamp}
Это лучший способ, потому что вам не нужно обновлять страницу!
MaxV
19
Я продолжаю спускаться по странице, и ответы становятся все лучше, смешно. Но это лучший, перестань искать здесь.
Эндрю
23
К вашему сведению, если вы установили файл cookie, используя путь, вам нужно будет также включить путь и в этот setcookieвызов:setcookie('key', '', time() - 3600, '/');
Гэвин
1
@Gavin Спасибо за этот совет. Я задавался вопросом, почему это не удаляло, но было unsettingуспешно.
stinkysGTI
1
Для любого, кто проверяет существование куки и заботится о куки, которые существуют со nullзначениями, вам нужно будет использовать array_key_exists () , поскольку куки со nullзначением не будут найдены isset()проверкой.
Лейт
27
Чтобы надежно удалить cookie-файл, недостаточно установить срок его действия в любое время в прошлом, как рассчитывает ваш PHP-сервер. Это связано с тем, что на клиентских компьютерах время от времени может отличаться от времени вашего сервера.
Рекомендуется перезаписать текущий файл cookie пустым файлом cookie, срок действия которого истекает через одну секунду в будущем после эпохи (1 января 1970 года, 00:00:00 UTC), например:
Поправьте меня, если я ошибаюсь, но если установить значение «1», это будет секунда после эпохи, а не одна секунда в будущем ..? Я полагаю, что вы правы относительно различий в часовых поясах, поэтому лучшим решением было бы установить его на 2 дня в прошлом (чтобы даже самый дальний часовой пояс все равно сбрасывал cookie).
PaulSkinner
@PaulSkinner дата эпохи не зависит от часовых поясов, компьютер делает это за вас.
AlexR
3
@AlexR Да. Хотя на самом деле не отвечает на мой вопрос. В моем понимании, приведенный выше код делает установить куки , чтобы истекать в прошлом (один второй прошлое эпохи), если я не ошибаюсь.
PaulSkinner
@PaulSkinner, конечно, остальная часть вашего комментария в порядке.
AlexR
9
+1 за «1». Я не понимаю, почему все остальные так зациклены на установке удаленного cookie ровно через час.
Мейснер
20
Это приведет к удалению cookie в вашем коде, но, поскольку переменная $ _COOKIE обновляется при каждом запросе, он просто возвращается при запросе следующей страницы.
Чтобы на самом деле избавиться от куки, установите дату истечения срока действия в прошлом:
// set the expiration date to one hour ago
setcookie("hello","", time()-3600);
У меня была та же проблема в моем коде, и я обнаружил, что это проблема с файлами cookie. Проверьте этот пост переполнения стека: Не могу удалить php set cookie
Я установил cookie, используя значение пути "/", но у меня не было никакого значения пути, когда я пытался его очистить, поэтому он не был очищен. Итак, вот пример того, что сработало:
Установка куки:
$cookiePath ="/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
Смотрите пример с пометкой « Пример # 2 пример удаления setcookie () » из документации PHP. Чтобы удалить cookie из браузера, необходимо сообщить браузеру, что срок действия файла cookie истек ... браузер затем удалит его. unsetпоскольку вы использовали его, он просто удаляет «привет» cookie из массива COOKIE.
Чтобы удалить cookie, вам просто нужно установить значение NULL:
«Если вы установили файл cookie со значениями, отличными от значений по умолчанию, в течение срока действия, пути или домена, вы должны снова указать эти же значения при удалении файла cookie, чтобы файл cookie был удален должным образом». Цитата из книги "Изучение PHP5".
Так что этот код должен работать (работает для меня):
Установка куки:
setcookie('foo', 'bar', time() + 60 * 5);
Это надежно, вот почему. Комбинация установки значения в ничто и времени в прошлом (но не слишком далеко, поскольку IE иногда не нравится это слишком далеко от того, что я прочитал) работает по всем направлениям.
PaulSkinner
Пустая строка ''- это не то же самое, что null.
Орев
3
Чтобы удалить все куки, вы можете написать:
foreach($_COOKIE as $key => $value){
unset($value);
setcookie($key,'', time()-3600);}
Я знаю, что прошло много времени с тех пор, как эта тема была создана, но я видел небольшую ошибку в этом решении (я могу назвать это так, потому что это деталь). Я согласен, что лучшее решение, вероятно, это решение:
Но в данном случае вы удаляете файлы cookie в каждом случае, когда работает функция отмены установки, и сразу же создаете новые файлы cookie с истекшим сроком действия в случае, если функция отмены не работает.
Это означает, что даже если функция unset работает, на компьютере все равно будет 2 куки. Запрашиваемая цель, с логической точки зрения, состоит в том, чтобы удалить куки, если это возможно, и если это действительно так, сделать так, чтобы срок их действия истек; чтобы получить «самый чистый» результат.
Функция unset предназначена для логики PHP (если вы хотите использовать переменную $ _COOKIE ['Hello'], вы не можете, поскольку она не установлена). А функция setcookie предназначена для навигатора. 2 различных целей, порядок функций не влияет на фактический код.
Kalzem
На самом деле, я знаю, что да, но если вы абсолютно хотите быть уверены, что cookie был сброшен / удален, и поэтому вы используете два решения прямо, было бы чище, прежде чем истечет срок действия тезисов, а затем сбросить тезисы, чем сбросить тезисы и затем воссоздайте просроченный файл cookie ... если вы понимаете, о чем я?
Грег
Да, извините, что отвечаю только сейчас :) Я отправил это, потому что я видел, как люди делают это по-другому ... но я думаю, что это кажется более умным, как это.
Грег
2
$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.
Этот код полностью удалит переменную 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{returnfalse;}}
Если вы хотите удалить $ _COOKIE ['user_account'].
Просто используйте:
Нет. Просто прочитайте документы. «Если установлено значение 0 или опущено, срок действия файла cookie истекает в конце сеанса (когда браузер закрывается)».
DrLightman
@DrLightman Спасибо за ваше участие, не могли бы вы привести документацию?
Амир Фо
function.setcookie.php , параметр expires . «Если установлено значение 0 или опущено, срок действия файла cookie истекает в конце сеанса (когда браузер закрывается)».
DrLightman
1
Просто установите значение cookie false, чтобы сбросить его,
Вы должны удалить куки с 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']);
Параметр домена будет означать текущий домен, если он опущен.
DustWolf
Я хотел сказать, что ваш ответ неверен. Он будет работать для любого домена, а не только для локальной машины, так как он будет автоматически использовать текущий домен. А ваш комментарий означает, что вы обижены или что-то в этом роде?
DustWolf
Вы даже читаете текст, который находится выше кода? перестань меня беспокоить, я работаю. я закончил с тобой разговаривать
Питер Группелаар
Я не понимаю, почему вас раздражают другие пользователи, если они указывают на ошибку в вашем ответе. setcookieработает для любого домена, локального или нет.
xorinzor
Так что, если все скажут, что это так ... тогда, должно быть, что-то явно не так с моим ответом ... То, что это было указано в этом посте, не имеет значения? ... вам нужны только некоторые направления ответов и игнорировать любых глобальных пользователей, которые работают над симуляцией ситуации ... я понял ... перестаньте меня беспокоить, мой ответ не ошибается.
$cookie->delete()
из github.com/delight-im/PHP-Cookie полезного. Код из вопроса просто удаляет свойство, которое было проанализировано на стороне сервера. Cookie все еще будет храниться на стороне клиента.Ответы:
Вы можете попробовать это
источник
unset($_COOKIE['Hello']);
. Это ничего не изменит, если вы удалите его.unset($_COOKIE['Hello']);
действительно важен, если вы можете проверить cookie где-нибудь позже в коде.Установите значение «» и дату истечения срока до вчерашнего дня (или любую дату в прошлом)
Тогда срок действия файла cookie истечет при следующей загрузке страницы.
источник
Чистый способ удалить cookie - это очистить как
$_COOKIE
файл cookie, так и файл cookie браузера:источник
setcookie
вызов:setcookie('key', '', time() - 3600, '/');
unsetting
успешно.null
значениями, вам нужно будет использовать array_key_exists () , поскольку куки соnull
значением не будут найденыisset()
проверкой.Чтобы надежно удалить cookie-файл, недостаточно установить срок его действия в любое время в прошлом, как рассчитывает ваш PHP-сервер. Это связано с тем, что на клиентских компьютерах время от времени может отличаться от времени вашего сервера.
Рекомендуется перезаписать текущий файл cookie пустым файлом cookie, срок действия которого истекает через одну секунду
в будущемпосле эпохи (1 января 1970 года, 00:00:00 UTC), например:источник
Это приведет к удалению cookie в вашем коде, но, поскольку переменная $ _COOKIE обновляется при каждом запросе, он просто возвращается при запросе следующей страницы.
Чтобы на самом деле избавиться от куки, установите дату истечения срока действия в прошлом:
источник
unset()
в печенье?У меня была та же проблема в моем коде, и я обнаружил, что это проблема с файлами cookie. Проверьте этот пост переполнения стека: Не могу удалить php set cookie
Я установил cookie, используя значение пути "/", но у меня не было никакого значения пути, когда я пытался его очистить, поэтому он не был очищен. Итак, вот пример того, что сработало:
Установка куки:
Очистка куки:
Надеюсь, это поможет.
источник
Если вы установили истечение срока действия cookie в прошлом, браузер удалит его. Смотрите setcookie () пример удаления на php.net
источник
Смотрите пример с пометкой « Пример # 2 пример удаления setcookie () » из документации PHP. Чтобы удалить cookie из браузера, необходимо сообщить браузеру, что срок действия файла cookie истек ... браузер затем удалит его.
unset
поскольку вы использовали его, он просто удаляет «привет» cookie из массива COOKIE.источник
Вот как работает PHP v7 setcookie ():
Исходя из вывода tcpdump во время прослушивания порта 80, сервер отправляет клиенту (браузеру) следующие заголовки HTTP:
Наблюдая за пакетами в следующих запросах, браузер больше не отправляет эти куки в заголовках
источник
Чтобы удалить cookie, вам просто нужно установить значение NULL:
«Если вы установили файл cookie со значениями, отличными от значений по умолчанию, в течение срока действия, пути или домена, вы должны снова указать эти же значения при удалении файла cookie, чтобы файл cookie был удален должным образом». Цитата из книги "Изучение PHP5".
Так что этот код должен работать (работает для меня):
Установка куки:
setcookie('foo', 'bar', time() + 60 * 5);
Удаление куки:
setcookie('foo', '', time() + 60 * 5);
Но я заметил, что все устанавливают дату истечения срока годности, это необходимо и почему?
источник
''
- это не то же самое, чтоnull
.Чтобы удалить все куки, вы можете написать:
источник
Просто установите дату окончания срока действия на один час назад, если вы хотите «удалить» cookie, например так:
или
Источник: http://www.php.net/manual/en/function.setcookie.php
Вы должны использовать эту
filter_input()
функцию для всех глобальных переменных, которые посетитель может вводить / манипулировать, например:Вы можете прочитать больше об этом здесь: http://www.php.net/manual/en/function.filter-input.php и здесь: http://www.w3schools.com/php/func_filter_input.asp
источник
Я знаю, что прошло много времени с тех пор, как эта тема была создана, но я видел небольшую ошибку в этом решении (я могу назвать это так, потому что это деталь). Я согласен, что лучшее решение, вероятно, это решение:
Но в данном случае вы удаляете файлы cookie в каждом случае, когда работает функция отмены установки, и сразу же создаете новые файлы cookie с истекшим сроком действия в случае, если функция отмены не работает.
Это означает, что даже если функция unset работает, на компьютере все равно будет 2 куки. Запрашиваемая цель, с логической точки зрения, состоит в том, чтобы удалить куки, если это возможно, и если это действительно так, сделать так, чтобы срок их действия истек; чтобы получить «самый чистый» результат.
Итак, я думаю, что нам лучше сделать:
Спасибо, и хорошего дня :)
источник
источник
Если вы хотите полностью удалить куки со всего вашего текущего домена, то следующий код определенно вам поможет.
Этот код полностью удалит переменную cookie со всего вашего домена, т.е. «/» - это значение переменной cookie, установленное для всего домена, а не только для текущего домена или пути. time () - 300 означает, что он устанавливает предыдущее время, поэтому срок его действия истекает.
Вот как это отлично удалено.
источник
Вы можете установить переменную сеанса на основе значений cookie
источник
Вы можете просто использовать эту функцию настройки:
Если вы хотите удалить $ _COOKIE ['user_account'].
Просто используйте:
источник
Это просто!
источник
Когда вы вводите
0
время, вы имеете в виду «сейчас» (+ 0 с сейчас - сейчас) для браузера, и он удаляет куки.Я проверил это в браузере Chrome, который дает мне:
источник
Просто установите значение cookie
false
, чтобы сбросить его,PS: - Это самый простой способ сделать это.
источник
Вы должны удалить куки с php на вашем сервере, а также с js для вашего браузера .. (Они сделали с php, но файлы cookie тоже есть в клиенте браузера):
Пример:
источник
Большинство из вас забывают, что это будет работать только на локальной машине. На домене вам понадобится шаблон, как в этом примере.
источник
setcookie
работает для любого домена, локального или нет.