Сессия на разных поддоменах, как?

Всем привет.

С домена example.com посылается запрос на api.example.com/?login, при этом на api.example.com создаётся сессия user.

необходимо иметь эту сессию на api.example.com, но также и проверять её наличие на example.com и example.com/my, для контроля: залогинен или нет.
попробовал перед открытием сессии вставить: ini_set('session.cookie_domain', '.example.com' );
Что по идее должно работать на api. и www. но не работает. даже на api. при последующем вызове, сессия теряется.
Пояснение "теряется": когда идет логин с домена, апи удачно создает сессию, и для дебага шлёт мне айди сессии. Если же я открываю апи напрямую, сессия создаётся новая, с другим айди.
session_set_cookie_params(0, '/', '.example.com'); тоже пробовал
Заранее благодарен.
  • Вопрос задан
  • 8051 просмотр
Пригласить эксперта
Ответы на вопрос 4
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Почитал, мда... а ларчик просто открывается то)
В .htaccess вставляем на всех поддоменах:
php_value session.cookie_domain .mysite.com
Обработчик сессии для всех поддоменов в этом случае должен быть один и тот же
или необходимо настроить передачу сессии между разными хостами.
Ответ написан
Комментировать
opium
@opium
Просто люблю качественно работать
Недавно решал такого рода вопрос.
Нужно чтобы куки с id сессиии были доступны для поддоменов тоесть .example.com как вы и написали, далее при отправки запроса с example.com на api.example.com лучше использовать curl и вставлять в тело запроса куки с именем PHPSESSID и значением из куки которая создается на api.example.com и доступна для example.com
Ответ написан
w_the_h
@w_the_h
define('SITE_SES_DOMAIN', '.exemple.ru');//доменное имя для сессиий и поддоменов
define('SITE_SES_TIME',60*120);// время жизни сессии, 30 минут (60*30)

У меня заработало при таких параметрах, + сессии хранятся в БД
ini_set('session.gc_maxlifetime', SITE_SES_TIME);
ini_set('session.cookie_lifetime', 0); // 0 - кука умирает при закрытии браузера
ini_set('session.cookie_domain',SITE_SES_DOMAIN);
session_set_cookie_params(SITE_SES_TIME,"/",SITE_SES_DOMAIN);
setcookie('PHPSESSID',session_id(),0,"/",SITE_SES_DOMAIN);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы