Ведение переменных сеанса по субдоменам

Я пытался поддерживать сеансовые вары между двумя субдоменами и считал это невозможным. Я закончил создание 2 минимальных веб-страниц PHP в качестве тестовой кровати, которую я называю «тест 1», просто устанавливает

$_SESSION['test'] = "Fred"; 

и имеет гиперссылку на «test 2», которая просто пытается отозвать значение $ _SESSION ['test'], чтобы доказать, что он сработал, или нет. Я помещаю 'test 1' в свой домен www и 'test 2' в свой поддомен. Я пробую различную версию того, что должно быть в заголовке, из разных источников. Вот основные 3 (и, конечно же, их варианты):

 ini_set('session.cookie_domain',substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100)); session_start(); 

или

 ini_set('session.cookie_domain','mydomain.com'); session_start(); 

или

 ini_set('session.cookie_domain', PHP_INI_ALL); session_start(); 

или

 session_set_cookie_params(0, "/", ".mydomain.com", false); session_start(); 

Я нахожу, что получаю одинаковый результат в каждом случае. Сеанс не переносится через субдомены, а проверка страницы 2 не имеет представления о том, какое значение я устанавливаю $ _SESSION ['test']. Тем не менее, по всей видимости, существует много уверенности в том, что один из вышеперечисленных методов должен работать. Любая идея, что может происходить, тем более, что я использую минимальные страницы для проверки механизма (никаких побочных эффектов, которые я могу видеть)? Кстати, я на общем сервере, если это уместно.

Спасибо за ваши мысли. Фрэнк.

Изменить . Я починил это. Проблема была вызвана Сухосиным. См. Подробный ответ в нижней части этой страницы.

Хорошо, я прибил его, и это было грубой.

Suhosin's suhosin.session.cryptdocroot вариант был всей причиной проблемы. Когда ключ шифрования сеанса основан на DocRoot, он приводит к тому, что поддомены не могут видеть переменные сеанса друг друга, когда базовый домен и поддомены обслуживаются из разных каталогов. Это приводит к тому, что сеансовые вары на сервере хранятся в разных папках и, следовательно, они не видны для каждого из соответствующих доменов.

Решение. Просто добавьте эти 2 строки в файл php.ini:

 suhosin.session.cryptdocroot=Off suhosin.cookie.cryptdocroot=Off 

48-часовой кошмар для отслеживания, 4,8 секунды, чтобы исправить.

У меня он работает, устанавливая имя сеанса и параметры cookie сеанса:

 $some_name = session_name("some_name"); session_set_cookie_params(0, '/', '.some_domain.com'); session_start();