Совместное использование переменных сеанса в PHP между субдоменами

Я хочу поделиться своими переменными сеанса в PHP, используя множество поддоменов. У меня есть пример:

  • example.com
  • subdomain1.example.com

Я пытаюсь использовать те же переменные сеанса между двумя доменами. Я уже тестировал множество функций в PHP, но ничего не работает. Вот мой способ проверить:

На example.com/page.php у меня есть этот тест:

echo '<pre>'; var_dump(session_set_cookie_params(0, '/', '.example.com')); session_start(); echo "Session ID : ".session_id()."\n"; $_SESSION['foo'] = 'bar'; print_r($_SESSION); 

И на subdomain1.example.com/page.php у меня есть тот:

 echo '<pre>'; session_set_cookie_params(0, '/', '.example.com'); session_start(); echo "Session ID : ".session_id()."\n"; print_r($_SESSION); 

Я вижу, что идентификатор сеанса одинаковый между двумя страницами, но переменные сеанса невозможно прочитать в subdomain1.example.com/page.php

Я проверил множество функций, например, назначил имя сеансу, но не получал никаких результатов.

Спасибо.

Единственный способ, которым я могу это сделать, – сохранить данные сеанса в файл cookie, а затем открыть файл cookie при доступе к другому домену. Вы можете прочитать, как это сделать здесь: http://www.depiction.net/tutorials/php/cookies-session-variables.php

Из любопытства, почему вы хотите это сделать?

Если вы хотите избежать использования решения на основе файлов cookie, и оба домена могут получить доступ к одной и той же базе данных, я бы сохранил сеанс в базе данных, а не в файловой системе:

Вот пример в комментариях к сессии на php.net: http://php.net/manual/en/book.session.php

Если сохранение в файле cookie невозможно, вы можете использовать общий уровень кэша. Это может быть база данных, такая как MySQL, или даже использовать APC (если она обслуживается одним и тем же сервером). Вы также можете использовать memcache. Записи на основе Memcache быстрее, чем использование базы данных. Более подробную информацию о хранилище сеансов memcache можно найти здесь:

http://php.net/manual/en/memcached.sessions.php

Следующий код протестирован и работает без необходимости прямого манипулирования файлами cookie (кроме самого сеанса) или чего-либо такого сложного, как Memcache / DB storage.

 ini_set('session.cookie_domain', '.sonassi.com' ); session_name('sonassi'); session_start(); 

Просто убедитесь, что session_save_path доступен для обоих доменов.