Я хочу поделиться своими переменными сеанса в PHP, используя множество поддоменов. У меня есть пример:
Я пытаюсь использовать те же переменные сеанса между двумя доменами. Я уже тестировал множество функций в 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 можно найти здесь:
Следующий код протестирован и работает без необходимости прямого манипулирования файлами cookie (кроме самого сеанса) или чего-либо такого сложного, как Memcache / DB storage.
ini_set('session.cookie_domain', '.sonassi.com' ); session_name('sonassi'); session_start();
Просто убедитесь, что session_save_path
доступен для обоих доменов.