Единая авторизация двух и более разных сайтов. Как это сделать?





Есть система авторизации на PHP, построенная на сессиях и cookie. Есть два разных сайта (разные домены), где одна и та же база данных user для их регистрации/авторизации. Но так как cookie записываются для конкретного домена, в частности первого сайта, не могу вытащить эти cookie для второго сайта для последующей авторизации на втором сайте.
Как реализовать механизм, чтобы авторизировавшись на одном сайте, второй сайт автоматически видел этого же пользователя и делал его того авторизированным?

Ответы (9)

RSS
+
0
через cookie это не сделать
avatar

pytn1k

  • 28 июля 2009, 08:03
+
0
"...Все через passport.yandex.ru. Но как мне вытянуть куки в yandex.ru из passport.yandex.ru?"

Все просто
setcookie($name, $data, $time, '/', '.yandex.ru', $secure);
если указать в качестве домена домен с предшествующей точкой то cookie будут доступны всем скриптам домена yandex.ru, а так же его поддоменам.
avatar

b-u

  • 29 июля 2009, 01:42
+
0
Если для используемой cms модуля обеспечивающую единую авторизацию нет, то, как подсказал CodeMaker, точка перед доменом в куках поможет. Но это если говорить о поддоменах. Для единой авторизации на совершенно разных доменах точкой в куках не обойдетесь, надо вклиниваться в процесс авторизации. Как именно вклиниваться зависит от движка.

В Drupal, например, есть такой модуль Shared Sign-On. Попробуйте на его примере изучить что к чему.

P.S. В связке с мультисайтингом на Drupal отлично работает. Не раз выручал. Это так, к слову.
avatar

chizo-nside

  • 10 июля 2009, 15:34
+
0
Хочу отметить что даже гугл не справился с такой задачей ;)
При заходе на любые из его сервисов необходимо заново логиниться, хотя и используется одна база Google Accounts

Но вопрос хороший. Даже если и можно как нить использовать куки от других сайтов - то это определенно будет не кроссбраузерно. В експлорере если и покатит - то в опере уж точно нет.
avatar

nq49zk

  • 27 июля 2009, 21:21
+
0
То что вы хотите сделать с помощью простой установки cookie не удастся...
Мы не так давно сделали подобную авторизацию у себя на сайтах (к примеру http://74.ru/passport/), смысл тут в передачи SID - номера текущей сессии на другие домены из списка.
Так как БД одна то мы можем проверить SID и если он активен поставить cookie пользователю с текущего домена.
Переадресация на следующий домен сделана на JS с показом хода авторизации так как доменов много...
Если через header(), то в FireFox есть параметр "network.http.redirection-limit" - по умолчанию равен 20 т.е. 21й редирект не пройдет и пользователь не попадет на сайт из списка...
avatar

agg

  • 19 июля 2009, 07:05
+
0
Хм, а реально привязать куки не к конкретному сайту, а просто сделать уникальное имя и использовать его на обоих сайтах?
avatar

ionet

  • 6 июля 2009, 22:40
+
0
обращусь к аратору Delfi, можно, но этот механизм зависит средств платформы программирования или настроек среды..
avatar

olnyshko

  • 20 июля 2009, 16:07
+
0
Похоже, Вам нужно организовать Single sign-on (SSO).
Реализовать это на PHP, вероятно, возможно, но это вне моей компетенции.
Ниже - пара ссылок.
avatar

nodoxi

  • 22 июля 2009, 05:48
+
0
а может можно жахнуть куку не только для .yandex.ru а сразу для .ru?
по идее никакой разницы нет. стоит попробовать?
avatar

pe-ial

  • 28 июля 2009, 22:32

Только зарегистрированные и авторизованные пользователи могут отвечать.