Есть ли способ дать указание веб-браузеру полностью удалить свой файл cookie с помощью PHP?
Я не хочу истекать или ждать закрытия браузера.
С удалением я имею в виду, что на самом деле он не был указан в списке файлов cookie.
Вы не можете заставить браузер удалять файл, связанный с любым файлом cookie, потому что вы не можете гарантировать, что на самом деле есть такой файл. Контракт между браузером и веб-сервером в отношении файлов cookie заключается в том, что данные будут представлены по соответствующим запросам.
Вы заявляете, что вы «не хотите дожидаться истечения срока действия файла cookie», но истечение срока действия cookie является правильным методом для указания того, что данные больше не нужны и не должны быть представлены в будущих запросах, что в большинстве случаев переводит на браузер удаляет файл.
Поэтому, чтобы удалить cookie, установите время его истечения в прошлое. В PHP это делается с помощью setcookie()
.
Попробуйте что-то вроде этого, чтобы удалить все файлы cookie:
foreach ($_COOKIE as $name => $value) { setcookie($name, '', 1); }
Значение 1
– это искомое значение, и оно представляет одну секунду после начала временного периода Unix. Так что это всегда истекло.
Да. Используйте setcookie()
и установите дату истечения срока действия файла cookie, который вы хотите удалить, в прошлое. В результате браузер пользователя должен автоматически удалить его.
«Кажется, что удаление печенья сложнее, чем кажется.
setcookie($name, '', 1);
Не будет этого трюка. « setcookie
и setcookie
может игнорировать всю инструкцию.
Кроме того, установка времени в прошлое иногда позволяет куки-файлу сохранить значение, время истечения которого более 1.
Я имею дело с этим прямо сейчас. Я не знаю, откуда она взялась, но она там.
Я прибегал к
setcookie($name, '0', 9000000000);
Это гарантирует, что cookie установлен на значение, которое разрешает false и что оно новее, чем любое предыдущее значение.
Если у кого-нибудь есть понимание этого поведения, пожалуйста, сообщите.
Я подозреваю, что трудность заключается в том, что значения домена и пути для setcookie
гарантированы одинаковыми от исполнения до исполнения, когда значения не указаны.
И я знаю, что такой файл cookie не истечет до 2038 года или около того.
В качестве альтернативы, если известна самая новая дата срока действия файла cookie, его нужно установить только через 1 секунду после.
Я думаю, что вам нужно использовать комбинированный подход:
Есть две веские причины для смешанного подхода:
Я написал этот плагин для меня и работает правильно.
(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);