Для настройки сессионных куков таким образом, чтобы сессия, созданная на поддомене, была доступна и на основном домене, важно установить параметр `domain` при создании куков сессии.
Допустим, у нас есть домен `example.com` и поддомен `sub.example.com`. Нам нужно, чтобы сессия, созданная на `sub.example.com`, была доступна и на `example.com`. Для этого нужно установить кук сессии для домена `.example.com` (обратите внимание на точку перед именем домена), что говорит браузеру использовать эту куку на всех поддоменах, включая основной домен.
Если вы используете PHP, вы можете настроить параметры сессии следующим образом:
```php
ini_set('session.cookie_domain', '.example.com');
session_start();
```
Или же вы можете установить значение `session.cookie_domain` в файле `php.ini`, чтобы изменения коснулись всего приложения:
```ini
session.cookie_domain = .example.com
```
После установки этого параметра все последующие сессионные куки будут доступны на всех поддоменах домена `example.com`.
Если вы используете другой серверный язык программирования (например, Python, Ruby, Node.js), вы будете использовать конфигурацию его фреймворка для установления доменного атрибута куки сессии аналогичным образом.
Например, в Express для Node.js:
```javascript
app.use(session({
secret: 'your_secret_key',
resave: false,
saveUninitialized: true,
cookie: { domain: '.example.com' }
}));
```
Обратите внимание на следующие моменты в работе с куками и субдоменами:
1. Для безопасности, куки с установленным доменом верхнего уровня будут отправляться браузером на все поддомены, включая основной домен, поэтому следует убедиться, что это не влечет за собой проблем с безопасностью.
2. Если вы используете защищенное соединение (HTTPS), убедитесь, что атрибут `Secure` также установлен в куках сессии.
3. С учетом изменений политик SameSite для куков в браузерах, установите атрибут `SameSite=None`, если требуется отправлять куки через разные субдомены в разных контекстах. Не забудьте также установить атрибут `Secure`, если вы устанавливаете `SameSite=None`.
4. Код запуска сессии (например, `session_start()` в PHP) должен выполняться до вывода любого содержимого на странице (то есть до любых echo, print и тегов HTML вне PHP-блоков).