Июль 10 2008

Куки не работают с локальными доменами

Категория: PHPgugglegum @ 04:24

Вот такое вот открытие сделал я для себя сегодня. Я потратил кучу времени, пытаясь понять почему при открытии страницы на локальном сайте с коротким доменным именем, прописанным в локальных хостах, например, “mysite” (или “localhost” — неважно) куки просто отказывались устанавливаться, если я явным образом указывал в параметрах setcookie домен. То есть вот так работает:

setcookie('Session', '123456', 0, '/');

А вот так уже не работает:

setcookie('Session', '123456', 0, '/', 'localhost');

Решение было найдено, хотя и не сразу. А все дело в спецификации Cookie:

Only hosts within the specified domain can set a cookie for a domain and domains must have at least two (2) or three (3) periods in them to prevent domains of the form: “.com”, “.edu”, and “va.us”. Any domain that fails within one of the seven special top level domains listed below only require two periods. Any other domain requires at least three. The seven special top level domains are: “COM”, “EDU”, “NET”, “ORG”, “GOV”, “MIL”, and “INT”.

Здесь сказано, что куку могут устанавливать только хосты внутри указанного в куке домена, причем домен должен содержать по меньшей мере 2 или 3 точки для предотвращения установки кук, соответствующих доменам верхнего уровня таким как .com, .edu и т.п. И далее утверждается, что для семи специально перечисленных доменов верхнего уровня допустимо 2 точки в адресе, для всех остальных — 3.

На сколько я понимаю, одна из этих точек подразумевается в начале каждого домена, т.е. вместо “mydomain.com” имеем в виду “.mydomain.com”. Однако, совершенно не понятно как быть с национальными доменами типа нашего .ru, которые совсем не обязаны иметь 2 поддомена над верхним. На практике это правило естественно не выполняется ни в одном браузере и браузеры просто требуют, чтобы в домене была хотя бы одна точка не в начале.

Есть еще один момент. Браузер Mozilla Firefox 3.0 почему-то не любит домены на базе .local, т.е. сохранять куки для домена anything.local он почему-то отказывается, хотя для .loc, .loca, localh, localhost и других — сохраняет прекрасно. Другие браузеры и даже сам Firefox, но второй версии такой особенностью не обладают.

Кстати, Opera (9.5) прекрасно сохраняет куки для всех доменов в том числе и без точки, например, localhost. Баг это или фича? На мой взгляд фича, т.к. реальных сайтов с именем “com”, “ru” и т.п. быть не может. Правда, если Вы в локальных хостах создадите домен с таким именем, то конфликт может быть. Не проверял…

7 отзывов на “Куки не работают с локальными доменами”

  1. dm9 says:

    Спасибьор автору громаднейшее!
    Статья вылезла первой по запросу “не работает cookie для localhost если указать домен” в Яндексе, и сразу решила мою проблему.

  2. fandm says:

    Благодарю! ;)))
    Очень помогла статья решить такую же проблему. Неизвестно сколько бы я ещё потерял времени зря, если бы не эта статья.
    Ещё раз спасибо!

  3. Макисм says:

    Спасибо огромное! Очень лаконично и точно в тему. Переломал много копий!
    Хочу ещё добавить - нужно не забыть куки очистить, а то будет как у меня всё уже правильно написано, но ещё правильно не работает… :)

  4. Алексей says:

    насколько я помню спецификацию, то в классическом понимании доменного имени правильно оно звучит так
    “mydomain.ru.” т.е. все домены пляшут от корневой точки.
    при настройке в unix системе доменной зоны указание доменного имени хоста как раз требует в конце точку.
    в результате получается что домен 2го уровня уже имеет две точки. хотя многие подстраховываются добавляя впереди “www”, т.е. “www.mydomain.ru.”

  5. Nitehost says:

    Большое спасибо автору за статью!!! Очень помогла!

  6. john v says:

    Спасибо. Очень помогло. Я уже запарился искать ответ на этот вопрос, и нашел только здесь

  7. Botchal says:

    А я нашёл:
    header(”Set-Cookie: name=value; path=/”);
    Посылал на оперу со страницы вида:
    http://127.0.0.1/магазин/категория/ноутбуки/
    Доступтна из http://127.0.0.1/ для всех каталогов

Напишите что Вы об этом думаете


*


*


rel=nofollow включен, спам не поднимет Page Rank Вашего сайта



Anti-Spam Image
Введите этот код, чтобы подтвердить, что вы человек
*

* — Обязательно для заполнения

Перейти на главную страницу