← Назад к вопросам
Будет ли доступна на дочернем домене cookie поставленная на основной домен?
2.3 Middle🔥 161 комментариев
#Браузер и сетевые технологии
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Cookie на основном домене и доступность на поддомене
Да, cookie установленная на основной домен (например, example.com) будет доступна на дочерних поддоменах (например, api.example.com, admin.example.com и т.д.), если она правильно сконфигурирована. Это один из ключевых механизмов работы с сессиями в веб-приложениях.
Как это работает
Всё зависит от атрибута Domain при установке cookie:
// Cookie установленная на основной домен
// Доступна на основном домене и всех поддоменах
document.cookie = "sessionId=abc123; Domain=example.com; Path=/";
// Проверим доступность:
// На example.com - ДОСТУПНА
// На www.example.com - ДОСТУПНА
// На api.example.com - ДОСТУПНА
// На admin.example.com - ДОСТУПНА
// На other.com - НЕ ДОСТУПНА
Явное указание Domain
// 1. Cookie на основной домен - доступна везде
Document.cookie = "token=xyz; Domain=example.com";
// Доступна на: example.com, www.example.com, api.example.com
// 2. Cookie только на конкретный поддомен - НЕ доступна на others
document.cookie = "token=xyz; Domain=api.example.com";
// Доступна ТОЛЬКО на: api.example.com
// НЕ доступна на: example.com, www.example.com, admin.example.com
// 3. Без Domain - доступна ТОЛЬКО на текущем домене
document.cookie = "token=xyz";
// Доступна ТОЛЬКО на: api.example.com (если вызвано с api.example.com)
Практический пример: Аутентификация
// На основном домене (example.com) устанавливаем session cookie
function setSessionCookie(sessionId) {
document.cookie = `sessionId=${sessionId}; Domain=.example.com; Path=/; Max-Age=3600; Secure; SameSite=Strict`;
}
// Точка перед domain (.example.com) явно указывает на поддомены
Важные параметры cookie
const cookieOptions = {
// Domain - определяет, на каких доменах доступна
domain: 'example.com', // Доступна на всех поддоменах
// или
domain: '.example.com', // Явное указание (точка = поддомены)
// или
domain: 'api.example.com', // Только на этом поддомене
// Path - путь, начиная с которого доступна
path: '/', // Доступна на всех путях
// Expires / Max-Age - время жизни
maxAge: 3600, // 1 час
// Secure - только через HTTPS
secure: true,
// SameSite - защита от CSRF
sameSite: 'Strict' // 'Strict', 'Lax', 'None'
};
Правила видимости cookie
1. Domain + Path
// Cookie установленная с Domain=example.com, Path=/api
// Доступна на:
// - example.com/api
// - example.com/api/users
// - www.example.com/api
// - api.example.com/api
//
// НЕ доступна на:
// - example.com/auth (другой path)
// - api.example.com/other (другой path)
document.cookie = "token=xyz; Domain=example.com; Path=/api";
2. Точка перед Domain (очень важно)
// С точкой - доступна на поддоменах
Document.cookie = "token=xyz; Domain=.example.com"; // .example.com
// Доступна на: api.example.com, www.example.com
// Без точки - тоже работает, браузер добавит её
document.cookie = "token=xyz; Domain=example.com"; // На самом деле .example.com
// Доступна на: api.example.com, www.example.com
// Конкретный поддомен
Document.cookie = "token=xyz; Domain=api.example.com";
// Доступна ТОЛЬКО на api.example.com
Распространённая ошибка: потеря cookie на поддоменах
// НЕПРАВИЛЬНО - cookie потеряется на поддоменах
function setBadCookie() {
// Браузер установит как Domain=api.example.com (текущий домен)
document.cookie = "sessionId=abc123; Path=/";
}
// ПРАВИЛЬНО - cookie доступна на всех поддоменах
function setGoodCookie() {
document.cookie = "sessionId=abc123; Domain=.example.com; Path=/; Secure; SameSite=Lax";
}
Практический пример: микросервисная архитектура
// Сервис аутентификации (auth.example.com)
function authenticateUser(credentials) {
fetch('https://api.example.com/auth/login', {
method: 'POST',
credentials: 'include', // Важно!
body: JSON.stringify(credentials)
})
.then(res => res.json())
.then(data => {
// Сервер установит cookie с Domain=.example.com
// После этого cookie будет доступна на всех поддоменах
console.log('Authenticated');
});
}
// На другом поддомене (dashboard.example.com)
function checkAuth() {
fetch('https://api.example.com/me', {
credentials: 'include' // Браузер отправит cookie
})
.then(res => res.json())
.then(data => {
// Cookie установленная на example.com
// будет отправлена автоматически
console.log('User:', data);
});
}
Установка cookie со стороны сервера
// Node.js / Express пример
app.post('/login', (req, res) => {
// ...
res.cookie('sessionId', sessionId, {
domain: '.example.com', // Доступна на всех поддоменах
path: '/',
httpOnly: true, // Недоступна из JS (безопаснее)
secure: true, // Только HTTPS
sameSite: 'lax',
maxAge: 1000 * 60 * 60 // 1 час
});
res.json({ success: true });
});
Важные моменты для собеседования
1. Иерархия поддоменов Cookie на example.com НЕ доступна на notexample.com. Domain должен быть подстрокой!
// Доступна на api.example.com
document.cookie = "token=xyz; Domain=.example.com";
// НЕ доступна на api.notexample.com (другой домен)
// Даже если пытаться: Domain=.notexample.com (запретит браузер)
2. httpOnly флаг
// Со стороны сервера можно установить httpOnly
// Это значит cookie НЕ доступна из JavaScript
// но будет отправляться в запросах
res.cookie('sessionId', token, {
httpOnly: true, // Не доступна document.cookie
secure: true, // Только HTTPS
sameSite: 'strict'
});
3. SameSite атрибут (защита от CSRF)
// Strict - отправляется ТОЛЬКО при same-origin запросах
// Lax - отправляется при навигации и same-origin запросах
// None - отправляется везде (нужен Secure flag)
document.cookie = "token=xyz; SameSite=Strict; Secure";
Проверка видимости cookie
// Проверить, какие cookie доступны сейчас
console.log(document.cookie);
// Вывод:
// "sessionId=abc123; userId=456"
// Если cookie пустая - значит cookie НЕ установлена
// или она httpOnly (установлена со стороны сервера с httpOnly=true)