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

Перво-наперво: DNS (система доменных имен) использует древовидную структуру для доменных имен, поэтому субдомен является дочерним узлом корневого узла (или домена). Например, web.mydomain.com является поддоменом mydomain.com. Как и images.web.mydomain.com. Здесь пара предостережений: субдомены сами по себе являются уникальными доменами, поэтому правила cors (совместное использование ресурсов между источниками) по-прежнему применяются при выполнении запросов ajax между субдоменами. Чтобы квалифицироваться как домен, доменное имя должно состоять как минимум из двух частей, разделенных знаком «.». Поэтому, когда вы пытаетесь протестировать свои поддомены локально, помните, что localhost сам по себе не будет работать в качестве корневого домена. mydomain.localhost будет.

Возможно, самое полезное - работать с субдоменами во время локальной разработки, чтобы вы могли экспериментировать с тем, что работает, а что нет. Для этого обслуживайте приложения своего поддомена на отдельных портах localhost. Отредактируйте файл / etc / hosts, присвоив выбранному корневому домену псевдоним localhost. Если вы хотите протестировать такие домены, как web.rootdomain.com и api.rootdomain.com, добавьте строку в свой файл hosts, например:

127.0.0.1       rootdomain.com

затем просмотрите свои приложения по этому корневому адресу и порту, на котором они обслуживаются, например: rootdomain.com:8000. Уникальные порты создают субдомены в корневом домене, поэтому вы можете установить файлы cookie в этом корневом домене и совместно использовать их между двумя приложениями. Использование localhost: 8000 не сработает, потому что домен должен состоять как минимум из двух частей: домена верхнего уровня, «.com», и второго уровня или основного домена, «корневого домена».

Если вы выполняете вызовы ajax из одного поддомена (или домена) в другой, не забудьте установить заголовки cors на вашем сервере, получающем запрос. Для тестирования можно установить «Access-Control-Allow-Origin» на «*», но для производства, чтобы запретить запросы, поступающие из любого домена, установите это значение для определенного обслуживаемого домена, от которого вы ожидаете запросы. Заголовок допускает только строковое значение, поэтому, если у вас есть несколько приемлемых запросов, установите его динамически из массива допустимых значений. См. Пример в проекте, ссылка на который приведена внизу.

При настройке файла cookie вы можете указать домен, для которого он будет установлен, но если вы этого не сделаете, по умолчанию файл cookie будет установлен только для того домена, для которого вы его устанавливаете. Чтобы установить файл cookie, который будет использоваться совместно с доменом настройки, а также всеми дочерними и дочерними доменами, установите для этого файла cookie значение .rootdomain.com. Он будет доступен для web.rootdomain.com, api.rootdomain.com и feature.web.rootdomain.com. При настройке домена cookie необходимо учитывать несколько предостережений в отношении безопасности и браузера, которые подробно описаны здесь: домены cookie.

Этот проект демонстрирует методы, обсуждаемые здесь, в простой настройке.