Проблема с невозможностью войти в административную панель 1С-Битрикс при многосайтовой конфигурации встречается нередко. Симптомы типичны: вводишь логин и пароль, страница перезагружается, но авторизация не сохраняется. Причина почти всегда одна — дублирование куки PHPSESSID для разных поддоменов. Разберём проблему детально.
Описание проблемы: сессия не работает при многосайтовости
При многосайтовости Битрикс запускает несколько сайтов на одном сервере, зачастую используя поддомены или разные домены. Каждый сайт в Битрикс может иметь свои настройки домена, и именно здесь возникает конфликт: браузер получает несколько куки с именем PHPSESSID, установленных для разных доменов (например, для example.com и для .example.com). При следующем запросе браузер отправляет оба значения, PHP получает конфликтующую сессию и не может корректно аутентифицировать пользователя.
Причина: дублирование куки PHPSESSID
PHP устанавливает куку сессии с параметрами домена, которые определяются в конфигурации. Если Битрикс управляет несколькими сайтами и для каждого задаёт собственный домен в заголовке Set-Cookie, в браузере накапливаются дубликаты PHPSESSID. Особенно часто это случается, когда:
- Сайты работают на поддоменах одного домена (site1.example.com и site2.example.com)
- Основной домен и поддомен указаны в настройках как отдельные сайты
- В настройках сайта в административной панели указан домен с точкой или без неё
В DevTools браузера (вкладка Application → Cookies) можно наглядно увидеть дублирующиеся куки PHPSESSID с разными значениями и доменами.
Решение 1: Сброс куки через dbconn.php
Быстрое решение — принудительно очистить дублирующуюся куку при инициализации Битрикс. Добавьте следующий код в файл /bitrix/php_interface/dbconn.php:
|
1 |
setcookie("PHPSESSID", "", 777, '/'); |
Эта строка устанавливает куку PHPSESSID с пустым значением, временем жизни 777 секунд от начала эпохи (фактически — просроченную куку) и путём /. Браузер при получении такого заголовка удаляет старую куку с этим именем. После этого PHP устанавливает свежую корректную куку, и конфликт исчезает.
Важный нюанс: эта строка должна стоять до момента запуска сессии Битрикс, иначе эффекта не будет. Файл dbconn.php подключается на самых ранних стадиях инициализации, поэтому это идеальное место для такого кода.
Решение 2: Настройка домена в параметрах сессии
Более «чистый» способ — явно задать домен для куки сессии в PHP. Добавьте в dbconn.php или php.ini:
|
1 2 3 4 |
// Устанавливаем единый домен для всех кук сессии ini_set('session.cookie_domain', '.example.com'); // точка перед доменом — для всех поддоменов ini_set('session.cookie_path', '/'); ini_set('session.cookie_secure', '1'); // если используется HTTPS |
Точка перед доменом означает, что кука будет доступна для всех поддоменов. Это позволяет использовать единую сессию на всём сайтовом кластере и избежать дублирования.
Решение 3: Удалить доменное имя из настроек сайта
В административной панели Битрикс проверьте настройки каждого сайта: Настройки → Настройки продукта → Сайты → [Ваш сайт] → Редактировать. На вкладке Домены убедитесь, что не задан домен, конфликтующий с основным. Часто проблему решает удаление явно прописанного домена — Битрикс определит его автоматически из запроса.
Настройка cookie-домена в php.ini
Если у вас есть доступ к php.ini, можно задать параметры сессии глобально:
|
1 2 3 4 |
session.cookie_domain = ".example.com" session.cookie_path = "/" session.cookie_httponly = 1 session.cookie_secure = 1 |
После изменений перезапустите PHP-FPM или веб-сервер.
Проверка: как посмотреть текущие куки в DevTools
Для диагностики проблемы откройте DevTools в браузере (F12) и перейдите на вкладку Application (Chrome) или Storage (Firefox). В разделе Cookies выберите ваш домен. Если видите несколько строк с именем PHPSESSID для разных доменов — проблема подтверждена. После применения решения должна остаться только одна кука.
Также можно использовать вкладку Network: выберите запрос к сайту и проверьте заголовки ответа (Response Headers) на предмет нескольких строк Set-Cookie: PHPSESSID=....
Предотвращение: правильная настройка многосайтовости
Чтобы избежать проблемы при первоначальной настройке многосайтовости в Битрикс:
- Используйте единый параметр
session.cookie_domainс точкой перед доменом для всей группы сайтов - Не указывайте разные домены в настройках сессии для разных сайтов в кластере
- В настройках сайтов в Битрикс старайтесь не дублировать домены с разным написанием (с www и без)
- При использовании HTTPS включайте флаг
Secureдля кук, чтобы исключить смешивание HTTP и HTTPS сессий
Корректная настройка кук сессии — залог стабильной авторизации на многосайтовом Битрикс без постоянных разлогиниваний и потери сессий.
