session_id () не получает переменные сеанса

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

Моя CMS находится на домене1.com. Веб-сайт, на котором он контролируется, находится на домене2.com. Моя система передает все переменные сеанса для данных входа из домена1.com в домен2.com через ссылку url (domain1.com имеет ссылку, подобную этой: http://domain2.com?sessionId=1gh... ) (sessionId генерируется session_id ()). domain2.com извлекает идентификатор сеанса и делает session_id($_GET['sessionId']) чтобы установить сеанс и захватить переменные. Затем он начинает показывать панель сверху с функциями администратора.

Эта система хорошо работает на одном из моих хостов, а также на моем локальном хосте. Но недавно я перешел на другой хост и с успехом установил свою CMS с тем же кодом. Все работает, кроме этой функции. Когда я нажимаю на ссылку и пытаюсь установить session_id, переменная session_id изменяется, но переменные $_SESSION удаляются. Когда я возвращаюсь к своей CMS, мне приходится переписываться. Как-то на этом хосте, изменение session_id удаляет переменные $_SESSION .

Мне никогда не нравились переменные сеанса, и я бы не использовал их, если бы я начал снова (я бы, вероятно, использовал простые куки). Но мне действительно нужно это понять. Хостом, на котором он работает, является Bluehost, причем оба домена размещены Bluehost. Хостом, на котором он не работает, является [EDIT] ByteHost, а регистратором домена является Godaddy.

Вот пример кода от domain2.com:

 if ( $_GET['sessionId'] ) { session_id($_GET['sessionId']); } session_start(); echo session_id(); // returns the proper sessionId passed through the url print_r($_SESSION); // does not work. returns array() ... 

Я могу гарантировать, что переменные $_SESSION существовали раньше, потому что я все еще был зарегистрирован в моей CMS.

Любые идеи, почему переменные сеанса работают на 1 хосте, но не на другом?

Я попытался заменить файл php.ini рабочим хостом. Проблема все еще была.

Спасибо за ваше время!

ОБНОВИТЬ

Я закончил удаление этого из моей CMS. Теперь я просто передаю данные для входа по URL-адресу, и он регистрирует человека. Он работает намного чище.

Вот некоторые причины, по которым это может не работать:

  • другой физический сервер
  • разные учетные записи для каждого домена (даже если это один и тот же физический сервер)
  • другой демон apache / php для доменов (некоторые общедоступные хостинговые сайты создадут отдельный каталог для каждого домена, а затем ограничат доступ Apache к общей информации между доменами.Это также повлияет на предотвращение передачи информации о сеансе.Подумайте об этом – вы хотите, чтобы чей-либо домен на одном и том же хостинг-провайдере имел доступ к вашей информации о сеансе вашего клиента?)
  • конфигурации (apache или php) или правил .htaccess

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

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

Чтобы иметь сеанс на нескольких доменах, вам нужно будет передать идентификатор сеанса в URL-адресе, а не в cookie-сессии, поскольку файлы cookie работают только на основе одного домена.

Использование поддоменов решит проблему, если они не являются отдельными клиентами a.domain.com and b.domain.com