Удалить cookie из браузера?
Есть ли способ проинструктировать веб-браузер полностью удалить один файл cookie с PHP?
Я не хочу истекать или ждать закрытия браузера.
С удалением я хочу на самом деле не иметь его в списке файлов cookie.
Ответы
Ответ 1
Вы не можете заставить браузер удалять файл, связанный с любым файлом cookie, потому что вы не можете гарантировать, что на самом деле такой файл - контракт между браузером и веб-сервером в отношении файлов cookie заключается в том, что данные будут представлены по соответствующим запросам.
Вы заявляете, что вы "не хотите дожидаться истечения срока действия файла cookie", но истечение срока действия cookie является правильным методом для указания того, что данные больше не нужны и не должны отображаться в будущих запросах, что в большинстве случаев делает перевод в браузер, удаляя файл.
Чтобы удалить файл cookie, установите время его истечения в прошлое. В PHP это делается с помощью setcookie()
.
Ответ 2
Попробуйте что-то вроде этого, чтобы удалить все файлы cookie:
foreach ($_COOKIE as $name => $value) {
setcookie($name, '', 1);
}
Значение 1
- это значение expire, и оно представляет одну секунду после начала временной разницы Unix. Таким образом, он всегда истек.
Ответ 3
Да. Используйте setcookie()
и установите дату истечения срока действия файла cookie, который вы хотите удалить, в прошлое. В результате пользовательский браузер должен автоматически удалить его.
Ответ 4
'Кажется, что удаление файла cookie сложнее, чем кажется.
setcookie($name, '', 1);
Не трюк. ''
пуст, а setcookie
может игнорировать всю инструкцию.
Также установка времени в прошлом иногда позволяет куки файлу сохранить значение, срок действия которого более новый, чем 1.
Я имею дело с этим прямо сейчас. Я не знаю, откуда он, но там.
Я прибегал к
setcookie($name, '0', 9000000000);
Это гарантирует, что cookie установлен на значение, которое разрешает false и что оно новее, чем любое предыдущее значение.
Если у кого-нибудь есть понимание этого поведения, пожалуйста, сообщите.
Я подозреваю, что трудность заключается в том, что значения домена и пути для setcookie
гарантированы одинаковыми от исполнения до выполнения, когда значения не указаны.
И я знаю, что такой файл cookie не истечет до 2038 года.
В качестве альтернативы, если известна самая новая дата истечения срока действия cookie, ее необходимо установить только через 1 секунду после.
Ответ 5
Я думаю, что вам нужно использовать комбинированный подход:
- установить срок действия в прошлом (как было предложено Chacha102)
- используйте JavaScript для удаления записей из объекта document.cookie DOM (как было предложено andres descalzo)
Есть две веские причины для смешанного подхода:
- JavaScript может быть отключен в браузере
- Не все куки файлы видны в документе .cookie. Некоторые современные браузеры поддерживают флаг httponly для файлов cookie. PHP поддерживает httponly cookies, см. http://www.php.net/setcookie
Ответ 6
Я написал этот плагин для меня и правильно работал.
(function($) {
$.cookieAllDelete = function(doc)
{
var cookie_date = new Date();
var cookies = null;
cookies = doc.cookie.split(';');
cookie_date.setTime(cookie_date.getTime() - 1);
for(var i=0; i < cookies.length; i++)
{
var cookie_name = cookies[i].split('=')[0];
try {
if (cookie_name.length > 0)
doc.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString();
} catch(ex) {}
}
}
})(jQuery);
jQuery.cookieAllDelete(document);