Авторизация пользователя на нескольких доменах одновременно - как реализовать?

shambler

Новичок
Авторизация пользователя на нескольких доменах одновременно - как реализовать?

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

В процессе разработки все выглядело так:
1. Домены site1.domain.com, site2.domain.com.
2. На сайте site1.domain.com была ссылка типа site2.domain.com?PHPSESSID=... , в которой передавался ид сессии.
3. Пользователь, переходивший по этой ссылке, юзал одну и ту же сессию (типа - куки нет, пхп хватает get и стартует ту же сессию)

Все работало на ура. Но после переноса сайтов на разные домены все сломалось :(( Теперь схема выглядит так:
1. Домены domain1.com, domain2.com.
2. ссылка осталась
3. Авторизированный пользователь переходит на другой сайт и остается авторизированным (!), но только на первой странице!!! При переходе на любую другую страницу сайта ид сессии изменяется. Почему?

Доп. Информация:

1. Пользователь с сайта domain1.com переходит на domain2.com. При этом: а) на первой странице он юзает ту же сессию, что и на первом сайте б) выставляется кука с ид сессии в) PHPSESSID не добавляется к ссылкам.
2. На сервере разработки и реальном сервере разные настройки пхп:
а) разработка (там, где механизм работал) - session.use_trans_sid = off; session.bug_compat_42 = off;
б) реальный (там где он не работает) session.use_trans_sid = on; session.bug_compat_42 = on;

При необходимости могу написать все остальные настройки.


Вопросы такие - почему при разработке работало, а сейчас - нет? Что сделать, чтоб механизм заработал?
 

Линк

Guest
просто на разные домены
или ФИЗИЧЕСКИ НА РАЗНЫЕ ХОСТИНГИ?
 

Фанат

oncle terrible
Команда форума
судя по
остается авторизированным (!), но только на первой странице!!!
находятся они на одном сервере

в порядке бреда
возможно, права на запись?
скажем, прочесть оно прочло, а записать - не смогло, и стартануло новую
 

shambler

Новичок
Линк

Хостинг один.

Фанат

Врядли. Проблему я решил таким образом - при получении идентификатора через GET сам выставляю куку с PHPSESSID. Все опять заработало.

Но почему перестал работать первый вариант - ума не приложу ....
 

Линк

Guest
так ты куку кладешь или ГЕТом передаешь?
 

shambler

Новичок
Линк

2. На сайте site1.domain.com была ссылка типа site2.domain.com?PHPSESSID=... , в которой передавался ид сессии.

Что я теперь делаю.
Если PHPSESSID пришел гетом (то есть, если пользователь с первого сайта перешел на второй), то выставляю куку PHPSESSID = $_GET['PHPSESSID'] (так как делает стандартный механизм сессий).
 

shambler

Новичок
Линк

Только для передачи ид между сайтами.

Непонятно вот что - когда сайты были на разных субдоменах - все работало нормально. Когда их развели по разным доменам - все сломалось. Почему?
 

Фанат

oncle terrible
Команда форума
вообще-то странно.
в всвое время когда я пытался запретить пыху ставить куку с сидом, у мен этого не вышло.
может , с тех пор он перестал это делать при
юзе кукис = 0?

-~{}~ 10.02.04 13:49:

и вообще!
если у тебя session.use_trans_sid = on; то при чем здесь вообще куки???
 

shambler

Новичок
Фанат

А я где-то говорил про юзе кукис = 0? Юзе кукис включен.

И, поскольку он включен, то значение параметра транс_сид меня почти не колышет.
 

Фанат

oncle terrible
Команда форума
. Когда их развели по разным доменам - все сломалось. Почему?
а почему бы тебе самому не посмотреть?
Механизм сессий состоит из совершенно примитивных операций.
почему бы тебе не проследить эти операции?
Стандартная для программиста задача - отладка.

-~{}~ 10.02.04 13:56:

И, поскольку он включен, то значение параметра транс_сид меня почти не колышет.
А меня колышет.
При наличии транс сида сессия не должна помирать на первой странице.
сид должен прекрасно передаваться в урле, и сессия подхватываться.
а у тебя она подхватывается, только если ты к жтому еще и куку ставишь.
что-то это очень подозрительно.
 

Линк

Guest
лучше всего (imho) в этой ситуации поглядеть заголовки
сразу будет видно - сервер не отдает куку
или бравзер ее не ставит
или еще что
 

shambler

Новичок
Фанат

Я описал практически все этапы. Если непонятно, сорри - попробую еще раз.

Ситуация1: Пользователь вошел в систему на сайте domain1.com. Перешел по ссылке domain2.com?PHPSESSID=....
Факты: а) ид сессии подхватился - пользователь остается залогиненным б) кука пользователю пришла (с сайта domain2.com) в) в куке пришел ПРАВИЛЬНЫЙ PHPSESSID.
Единственным неизвестным остается время жизни этой куки.

Ситуация2: В Ситуации1 пользователь переходит по какой-либо ссылке, оставаясь на том же сайте, на котором он сейчас находится (domain2.com)
Факты: а) Куки с PHPSESSID сервер не получает (!) б) а) => стартует новая сессия.
 

shambler

Новичок
Фанат

Посмотри внимательно на мой первый пост - я описываю только факты. А факт тут вот какой - на сервере разработки транс_сид был выключен и все великолепно работало.

На реальном сервере транс_сид включен. В браузере куки разрешены.

-~{}~ 10.02.04 14:13:

Линк

Почему глух?
Я ж сказал, что кука выставляется, но не принимается. Что-то еще нужно?
 

Фанат

oncle terrible
Команда форума
извини, это этапы с точки зрения пятилетнего ребенка.
этакое описание внешнего вида.
все твои описания сводятся к тому, что "там работает, а тут не работает. расскажите, почему".
скажи честно, ты вообще такое слово "отладка" знаешь?
или по-твоему, это - тыкать по ссылкам и смотреть что получится?
Не стесняйся, я тебе объясню.
 

shambler

Новичок
Скажи честно, каким инструментом ты пользуешься для ПОЛНОЦЕННОЙ отладки PHP кода? Я совсем не стесняюсь - объясни.

Пусть это этапы с точки зрения пятилетнего ребенка. Тогда (если эта тема тебе интерестна или не в лом писать) скажи что я пропустил? Что еще нужно описать?
 

Фанат

oncle terrible
Команда форума
выставляю куку PHPSESSID = $_GET['PHPSESSID']
и это работает?
б) кука пользователю пришла (с сайта domain2.com)
а это не работает?
Я ж сказал, что кука выставляется, но не принимается. Что-то еще нужно?
Нужно.
Извини, я забыл телепатические очки, чтобы поглядеть, чем эти куки различаются. Так что, не обессудть, но тебе уж как-нибудь самому придется поглядеть.

-~{}~ 10.02.04 14:23:

shambler
я пользуюсь print_r()

Но при чем здесь РНР код?
У тебя здесь разве код не работает?

-~{}~ 10.02.04 14:25:

Единственным неизвестным остается время жизни этой куки.
как это - неизвестным?
оно стандартное - до закрытия браузера
 
Сверху