Настройка cookie для сайта в http и https под разными поддоменами в PHP - PullRequest
2 голосов
/ 17 марта 2010

Ситуация:

  1. Я пытаюсь запустить магазин https (xcart) под одним доменом secure.example.com и хочу получить доступ к cookie, который он устанавливаетв http www.example.com
  2. Я использую PHP на Apache (MAMP), тестирую в Firefox с Firecookie
  3. Существующий код устанавливает куки на .secure.example.com,Я не уверен, что это связано с xcart, но setcookie на самом деле вызывается с помощью secure.example.com.Я не уверен, почему добавляется ".".

Проблемы:

  1. Когда я пытаюсь использовать setcookie в https для использованиядомен .example.com или просто example.com, файл cookie не создается, независимо от того, запускаю ли я магазин по http или https.Код тестирования, который я использую:

    setcookie('three', 'two', 0, "/", ".example.com");
    

Если установить cookie на secure.example.com или .secure.example.com, он действительно появится.

Есть липричина, по которой файл cookie не отображается?

Ответы [ 3 ]

3 голосов
/ 17 марта 2010

Проблема заключалась в том, что я использовал localhost с доменом из одного слова, «mydomain», факт, который по какой-то причине был отредактирован из исходного сообщения. По крайней мере, для firefox требуется как минимум два слова для явно установленного cookie, что-то вроде mydomain.local. Я изменил файл hosts, чтобы иметь домены: www.mydomain.local и secure.mydomain.local, и мне удалось установить файлы cookie для .mydomain.local.

Также я обнаружил, что php автоматически ставит «.» перед явно установленными куки.

1 голос
/ 17 марта 2010

Да - но политика определяется браузером (и на некоторых браузерах можно настроить).

IIRC семантика предыдущего. объяснены в RFC для проверки (2109 для стандартных файлов cookie:

A - это строка полного доменного имени, имеющая форму NB, где N - непустое имя строка, B имеет вид .B ', а B' - строка FQDN. (Итак, x.y.com совпадает с доменом .y.com, но не y.com.)

То, что я бы истолковал как означающее, что домиану в директиве setcookie, предназначенной для использования в качестве подстановочного совпадения, должен предшествовать символ '.' то есть .example.com - однако в спецификации говорится:

Домен = домен Необязательный. Атрибут Домен указывает домен, для которого cookie действителен. Явно указанный домен должен всегда начинаться с точкой.

Что для меня означает обратное.

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

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

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

secure.www.example.com

и

www.example.com

(удаление куки для [.] Www.example.com)

НТН

С

0 голосов
/ 17 марта 2010

Вы пробовали setcookie('three', 'two', 0, "/", ".mydomain.com");?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...