2012-04-15 3 views
0

У меня есть сайт, назовем его www.example.com На этом сайте есть две страницы. Один создает печенье, как это:Не удается удалить cookie с явным доменом, когда он был создан с доменом по умолчанию

setcookie('daCookie', 'boo', 2000000000, '/', '', false, true); 

И другой один пытается удалить его, как это:

setcookie('daCookie', '', 1, '/', 'www.example.com', false, true); 
setcookie('daCookie', '', 1, '/', '.www.example.com', false, true); 

Теперь я знаю , что первый сценарий был вызван в контексте www.example.com. Если я использую инструменты разработчика браузера (Google Chrome в этом случае), я могу видеть, что домен файла cookie - www.example.com. Однако второй вызов не удаляет его. Если я изменю его на пустой домен:

setcookie('daCookie', '', 1, '/', '', false, true); 

Тогда он работает. Но я действительно хотел бы указать домен явно. Почему это не работает?

ответ

1

Я верю во второй вызов (явно передавая имя домена), браузеры могут префиксное значение с точкой (.) Со своего домена. Именно поэтому этот вызов не удаляет куки, который был установлен ранее (не передавая $ домена параметров.)

+0

К сожалению, я должен был упомянуть - использование '.www.example.com' также не работает. Я отредактировал вопрос, чтобы отразить это. –

+0

На самом деле я тестировал Lynx (так как он подсказывает мне настройку файла cookie), и он работал в обоих случаях. Позвольте мне отлаживать когда-нибудь позже. – g13n

+0

Я не удивлен. Это работает для меня и в Opera. Но не в Chrome. –

0

От руководства PHP, все примеры (явно передавая домен) используйте:

setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1); 

Если явно передать параметр домена, похоже, что лучше всего игнорировать «www».

Он также имеет это сказать о параметре домена:

Домен, что куки доступны. Настройка домена на «www.example.com» сделает файл cookie доступным в субдомене www и более высоких поддоменах. Файлы cookie, доступные для более низкого домена, такие как 'example.com', будут доступны для более высоких поддоменов, таких как 'www.example.com'. Старые браузеры, все еще применяющие устаревшие » RFC 2109, могут потребовать ведущих. для соответствия всем поддоменам.

+0

Основная причина, по которой я хочу удалить этот файл cookie именно _because_, он установился с неправильным доменом. Я случайно оставил поле домена пустым, и теперь у многих людей есть файл cookie с «www.example.com», который переопределяет правильный «cookie» example.com. Поэтому я хочу удалить cookie из домена «www.example.com», но оставить cookie «example.com» неповрежденным. –

+0

setcookie ('daCookie', '', time() - 3600, '/', 'www.example.com', false, true); Вы можете дать это попробовать – Dale

+0

Единственное различие - время.Я уже проверил, что мой код отправляет правильную дату/время на 1970 год. Я сомневаюсь, что это поможет любому. –