← Назад к вопросам

Будет ли доступна на дочернем домене 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)
Будет ли доступна на дочернем домене cookie поставленная на основной домен? | PrepBro