Совместное использование сеанса php ($ _SESSION) для нескольких доменов

У меня есть 2 разных домена, назовем их www.foo.com и bar.foo.com. Первый построен с CI, а второй – с Symfony. Я хочу поделиться своей сессией, поэтому, если я войду в один из них, я могу получить доступ к другому. Я установил свои данные сеанса с помощью $_SESSION["session_name"] = "value"; ,

Как сделать данные сеанса доступными для чтения из другого домена?

Спасибо за вашу помощь.

Учитывая ваш первоначальный вопрос и ваши ответы на Логана и меня в комментариях исходного вопроса, я понимаю:

1 – вы хотите передать переменные сеанса среди домена и его поддоменов; а также

2 – CI и Symfony загружают сеанс, прежде чем у вас будет возможность выполнить команду ini_set.

Я считаю, что у вас есть два варианта:

1 – включить команду конфигурации php в файл php.ini

 session.cookie_domain=".foo.com" 

Если вы попытаетесь включить его в .htaccess, это не сработает, если вы используете php как модуль CGI, который, по-видимому, довольно распространен среди служб общедоступного хостинга.

2 – вы можете добавить файл ко всем скриптам php на своем сайте. Те будут помещены поверх каждого скрипта php, который запускает ваш сайт, даже те, что находятся внутри CI и Symfony. Например:

Файл phpprepend.php

 <?php ini_set('session.cookie_domain', '.foo.com'); ?> 

включите следующую строку в файл php.ini:

 auto_prepend_file = "/path/to/file/phpprepend.php" 

Пожалуйста, сообщите нам, если это решит проблему.

Удачи!

Используйте функцию session_name иметь одно имя сеанса. Это будет работать для поддоменов. И если они являются полными разными доменами, и если вы используете cookie для передачи идентификатора сеанса, это не сработает, потому что cookie работает только для одного домена.

Вам необходимо настроить домен cookie сеанса так, чтобы он был доступен с обоих сайтов.

 <?php ini_set('session.cookie_domain', '.foo.com'); 

Либо добавьте, что код PHP на обоих сайтах очень рано загружается, либо добавьте что-то вроде этого в ваш .htaccess файл на обоих сайтах.

 php_value session.cookie_domain ".foo.com" 

Я не уверен на 100%, что работает второй вариант, но я думаю, что это нужно.

Сессии связаны с фактическими файлами на сервере, которые содержат данные сеанса. Поэтому, если у сайтов нет способа совместного использования этих временных файлов сеанса, они не могут использовать сеансы. То есть, если сеанс не сериализуется и не отправляется на другой сайт. Я думаю, что единственным решением является реализация сеанса, который получает и сохраняет данные сеанса во внешней базе данных, к которой имеют доступ оба сайта. Затем, если server 1 отправляет идентификатор сеанса на server 2 а server 2 использует его для доступа к базе данных, он может получить доступ к данным сеанса, хранящимся на server 1

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

Поэтому, хотя технически они будут состоять из двух разных сеансов, база данных будет синхронизировать их.

Это, конечно, предполагает, что ваши два сайта используют одну и ту же базу данных.