2013-03-05 5 views
2

привет, я с ума сошел от проблемы, которую я пытался извлечь.delete cookie не работает

я не могу удалить куки, который будет установлен на index.php как то:

$a = 'text'; 
setcookie('name_of_cookie', $a, time()+60*60*24*365); 

на странице-PHP я могу назвать это печенье и содержание походит $ а. я попытался удалить, что различные способы на page.php подобное:

setcookie('name_of_cookie', FALSE, time()-3600); 

я также нашел версию, где я только установить его:

setcookie('name_of_cookie'); 

что только будет установлен другой печенье с тем же имя, которое я видел в настройках браузера. что новый cookie не имеет содержания - уверен, контент не объявлен.

Я также пытался установить более высокое время в прошлом из-за расположения сервера, но это тоже не работает. даже попытка установить время только 1 не работает.

Я проверил правописание имени в средние времена, нет никаких сбоев, которые исходят от разных имен.

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

спасибо.

+1

Не забудьте закрыть браузер и повторите попытку, так как после уничтожения Cookie он будет удален только после перезапуска браузера. – Vineet1982

ответ

5

При установке куки быть очень специфичными, как вы установите их. Всегда устанавливайте доменное имя (которое можно взять из $ _SERVER ['SERVER_NAME']) и путь (который я обычно устанавливаю в «/»). Если вы несовместимы, что-то может принять «умную» инициативу и нарушить вашу логику. Это происходит часто, когда вы устанавливаете файлы cookie в JS и пытаетесь удалить их с PHP (или наоборот). У вас может быть несколько файлов cookie с тем же именем, но с другим субдоменом или путем.

Например установить куки, как это:

setcookie('Foo', 'Bar', time() + 3600, '/', $_SERVER['SERVER_NAME']); 

И убрать их так:

setcookie('Foo', '', time() - 999999, '/', $_SERVER['SERVER_NAME']); 

Недостающие 2 последние аргументы поставит вас в ситуации вы находитесь в данный момент.

+0

Быстро снизьте меня, а затем исправьте свой ответ на мой, хороший один = o) –

+0

Правильно ли я удалял false с '', который был действительной точкой. Ответ на эту проблему - убедиться, что OP установлен/отключен cookie с именем домена и путем. Вы можете найти в своем вопросе, что у него заканчивается несколько файлов cookie с тем же именем. Вы этого не объяснили. –

+0

@ cryptic ツ быстро подпереть и принять для меня, потому что легко понять, что не так для моего кода = o) – bonny

1

Удалить все куки, как показано ниже.

if (isset($_SERVER['HTTP_COOKIE'])) 
{ 
    $cookies = explode(';', $_SERVER['HTTP_COOKIE']); 
    foreach($cookies as $cookie) { 
     $parts = explode('=', $cookie); 
     $name = trim($parts[0]); 
     setcookie($name, '', time()-1000); 
     setcookie($name, '', time()-1000, '/'); 
    } 
} 
+0

Почему бы вам просто не перечеркнуть суперглобальное '$ _COOKIE'? –

+0

@cryptic ツ, поскольку он содержит исходное значение заголовка 'Cookie', отправленного агентом пользователя. –

+1

Необработанное значение не имеет значения, так как вам просто нужно имя файла cookie. –