Совместное использование php-сессии ($ _SESSION) в нескольких доменах - PullRequest
3 голосов
/ 07 сентября 2011

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

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

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

Ответы [ 5 ]

3 голосов
/ 07 сентября 2011

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

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 file

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

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

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

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

Удачи!

1 голос
/ 07 сентября 2011

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

0 голосов
/ 07 сентября 2011

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

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

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

0 голосов
/ 07 сентября 2011

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

0 голосов
/ 07 сентября 2011

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

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

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

php_value session.cookie_domain ".foo.com"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...