У меня есть 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
У воспламенителя кода есть возможность использовать его библиотеку сеансов, которая имеет поддержку для хранения ваших сеансов, это база данных, может быть какая-то форма плагина, или вы можете создать свой собственный для симфонии, который может читать сеансы воспламенителя кода из базы данных и настроить сеанс внутри симфонии.
Поэтому, хотя технически они будут состоять из двух разных сеансов, база данных будет синхронизировать их.
Это, конечно, предполагает, что ваши два сайта используют одну и ту же базу данных.