Совместное использование переменных $ _SESSION между поддоменами с использованием PHP - PullRequest
2 голосов
/ 29 апреля 2010

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

sessionid одинаково на обоих поддоменах, но переменные недоступны.

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

Вот как я настраиваю домен для сессии:

Спасибо, Скотт

UPDATE Извините, должен был сказать, я уже использую следующее:

ini_set('session.cookie_domain', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));

if(session_id ==''){session_start();}

Ответы [ 2 ]

3 голосов
/ 29 апреля 2010

Вы ищете эту функцию: session_set_cookie_params(). Допустим, у вас есть два домена:

  1. site1.example.com
  2. site2.example.com

Чтобы поделиться данными сеанса между обоими доменами, вызовите следующую функцию перед session_start():

session_set_cookie_params(0, '/', '.example.com');

(Изменить: действительно я забыл точку в коде примера)

0 голосов
/ 29 апреля 2010

Идентификатор сессии точно такой же на оба субдомена (..)

Вы уверены, что значение (не имя) sessionid одинаково?

Мне понадобилось подобное 2 года назад, но мне нужно было работать на совершенно разных виртуальных хостах (например, example.com и что-то .else.net), поэтому я написал небольшой скрипт, который гарантирует, что пользователь получит то же самое session_id на разных виртуальных хостах. Исходный код доступен по адресу http://www.misc.lv/_downloads_file.php?id=18,, но в строке 58 есть небольшая ошибка - аргументы strpos () следует поменять местами (мне лень это исправлять и загружать исправленный скрипт).

Основные требования / шаги:

  1. все страницы должны быть на одном сервере, так как им требуется общее «хранилище» для переменных сеанса;
  2. должен быть один "главный" хост; количество «дополнительных» хостов не ограничено;
  3. если открытая в данный момент страница находится на «главном хосте» (и это не запрос session_id), ничего «экстраординарного» делать не нужно;
  4. если страница находится не на «главном хосте» и существует активный сеанс, ничего «экстраординарного» делать не нужно, так как session_id, вероятно, уже предоставлен;
  5. если страница не находится на "главном хосте" и нет активного сеанса, запросите идентификатор_сессии с "основного хоста".
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...