Учитывая тот факт, что вы уже знаете свое доменное имя, есть ли причина, по которой вы используете substr для его определения?Вы могли бы быть намного более читабельным, если бы вы просто использовали:
ini_set('session.cookie_domain', '.domain.tld');
Чтобы файлы cookie работали в нескольких поддоменах, домен cookie должен начинаться с точки (.), За которой следует общая часть всех дочерних доменов.домены (скорее всего domain.tld.)
Кроме того, вторая строка вашего сообщения, где вы проверяете, нужно ли начинать сеанс, неверна.Вы пропускаете набор скобок после session_id, потому что это функция, а не константа.Условный оператор (if) всегда будет терпеть неудачу, вызывая метод session_start () каждый раз.
if ( empty(session_id()) ) session_start();