2009-08-12 4 views
13

Есть ли способ проинструктировать веб-браузер полностью удалить один файл cookie с PHP?Удалить cookie из браузера?

Я не хочу истечения него или ждать браузера, чтобы быть закрыто.

С удалением я имею в виду, что на самом деле он не указан в списке файлов cookie.

+0

Вы можете «вежливо попросить» браузер удалить cookie, установив его значение в пустую строку или установив время истечения срока действия на какую-либо дату в прошлом или используя '$ cookie-> delete();' из https : //github.com/delight-im/PHP-Cookie – caw

ответ

9

Вы не можете заставить браузер, чтобы удалить файл, связанный с какой-либо куки, потому что вы не можете гарантировать, что есть на самом деле такой файл - договор между браузером и веб-сервером в отношении печеньем заключается в том, что данные будут представлены по соответствующим запросам.

Вы заявляете, что вы «не хотите дожидаться истечения срока действия файла cookie», но истечение срока действия cookie является правильным методом для указания того, что данные больше не нужны и не должны отображаться в будущих запросах, которые в большинстве случаев case делает перевод в браузер, удаляя файл.

Чтобы удалить файл cookie, установите время его истечения в прошлое. В PHP это делается с setcookie().

+0

Это было самым близким к ответом (абзац # 1). Спасибо. –

5

Да. Используйте setcookie() и установите дату истечения срока действия файла 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); 
+3

Насколько хорошо это работает, если у меня отключен JavaScript? :-) – ceejayoz

+0

Извините, я также смотрел теги jQuery, и я смущен. спасибо за вниз –

+1

Вниз не было от меня. – ceejayoz

19

Попробуйте что-то вроде этого, чтобы удалить все кук:

foreach ($_COOKIE as $name => $value) { 
    setcookie($name, '', 1); 
} 

Значение 1 является истекает значения и представляет собой один второй после начала времени эпохи Unix. Так что это всегда истекло.

+0

Кто-то пошел и снизил все ответы, связанные с истечением срока, поскольку в вопросе говорилось, что они не хотят истекать. –

+17

@ Chacha102: Ну, тогда кто-то сейчас не работает, как работают куки. – Gumbo

+0

@ Gumbo Или вы можете импровизировать и обернуть этот ответ в функции, называемой 'deleteAllCookies', чтобы подделать ее для этого человека. : P – choz

1

Я думаю, что вы должны использовать комбинированный подход:

  • истечения установленного еще в прошлом (как это было предложено Chacha102)
  • использование JavaScriptto удалять записи из объекта document.cookie DOM (как это было предложено Andres descalzo)

Есть 2 хорошие причины идти со смешанным подходом:

  • JavaScript может быть отключен в браузере
  • Не все куки-файлы видны в документе.cookie Некоторые современные браузеры поддерживают флаг httponly для файлов cookie. PHP имеет поддержку HTTPOnly печенье см http://www.php.net/setcookie
3

«Похоже, что удаление печенья сложнее, чем кажется.

setcookie($name, '', 1); 

Не получится. '' пуст, и setcookie может игнорировать всю инструкцию.

Кроме установки времени в прошлое, иногда позволяет печенье, чтобы сохранить значение, для которого истекает время новее, чем 1.

Я имею дело с этим прямо сейчас. Я не знаю, откуда она взялась, но она там.

Я прибег к

setcookie($name, '0', 9000000000); 

Это гарантирует, что куки устанавливается в значение, которое разрешает ложь и что он новее, чем любое предыдущее значение.

Если у кого-нибудь есть понимание этого поведения, пожалуйста, сообщите.

Я подозреваю, что сложность заключается в том, что значения домена и пути для setcookie гарантированы одинаковыми от исполнения до исполнения, когда значения не указаны.

И я знаю, что такой файл cookie не истечет до 2038 года или около того.

Альтернативно, если известна самая новая дата срока действия файла cookie, его необходимо установить только через 1 секунду после.

+0

В моем случае причина, по которой setcookie не работает, заключается в том, что я не использовал одно и то же местоположение для четвертого параметра. Поэтому убедитесь, что вы используете одно и то же местоположение для 4-го параметра, чтобы успешно удалить cookie. – Antony

+1

. Я обнаружил, что вам нужно установить одинаковые параметры для установки и удаления cookie. Set Cookie: setcookie ($ name, $ uid ', $ time,'/',' ', 0); - Удалить Cookie: setcookie ($ name, $ uid ', 1,'/',' .domain.name ', 0); не будет работать, 5-й параметр должен быть одинаковым для обоих. – Grant

+0

Печатать $ _COOKIE массив, unset perticular key: unset ($ _ COOKIE [$ name]); – ShivarajRH

Смежные вопросы