RomanBush а у слона толще. И чтобы сделать кроссдоменную авторизацию можно написать свою ось (да готовых открытых осей навалом, мне что, пеерчислять их все и говорить как их написть???), поднять свои вебсервера (да полно книжек о том, как сделать вебсервер, и как их администрировать, а у кого-то экзамен там был, куча вопросов и ни одного неправильного ответа, и вопросы далеко не "как с помощью зубочистки, стакана воды и картины Репина настроить удаленно роутер через консольный интерфейс") и сделать свою сеть (да полно в нете книжек как сделать свою сеть, даже перечислять не буду). Есть что сказать - мы с удовольствием выслушаем.
конечно не поделу. разработать с нуля систему разобрав при этом AD - это далеко не по делу. повторюсь: есть что сказать - мы с удовольствием выслушаем.
Решил ответить "поразвёрнутее". Если ты хочешь быть програмистом и у тебя есть задача под названием "Кроссдоменная авторизация", то ты поднимешь жопу, пойдёшь в магазин, купишь там книжки, которые я посоветовал и внимательно их изучишь, а не просто пролистаешь. А если ты начитался "21 урок по дельфи", "21 урок по php", "21 урок по яваскрипту" и мнишь себя реальным крутым програмером - флаг тебе в ж..., барабан на шею и ветер в спину - мни себя крутым програмером дальше. Лично мне разговаривать с тобой не о чем. Это моя позиция.
RomanBush - ты может видел мои проекты ??? или в курсе моих знаний ? твои высказывания несут явно оскорбительный характер, причем я немогу припомнить чтобы давал повода! вариант ответа на тему: , я нахожу мало информативным, как и последущее "типа как-то так". Мой вопрос состоял в том чтобы обсудить варианты, и естественно при необходимости я обращусь к различным источникам. Я уверен что вариантов реализации подобной задачи было придумано немало, и если у кого был опыт, я предлагал им поделится, потому как опыт ВСЕГДА важнее сухой теории! ------------------- в надежде на адекватный ответ!
В свое время у меня тоже встала такая проблема. Пробовали через JavaScript сделать но результат был таким как сказал уважаемый Dagdamor. Потом присмотрелись к openId.... и сделали по этой аналогии. То есть база пользователей одна. Есть машина на которой весит сервер XML_RPC. Юзверь заходит на сайт вбивает свои данные, потом идет обращение на сервак с пользовательской БД и происходит авторизация. ИМХО нормальный вариант.
Эм... nimistar, Джордж Шлосснейгл "Профессиональное программирование на PHP" Глава 13. Подзаголовок "Единая регистрация" Там в принципе то же что сказал Sergey89 только с примерами и кусочками кода. и ссылками на другую литературу по этой теме в конце главы...
мне б кусок кода, конкретный пример) А то та книга "професиональное программирование" в виде скана. Перенабирать вручную/распознавать не хоцца.
Koc Организуй собственные сессии на основе куки Алгоритм: 1)При авторизации заводим сесиию. 2)Записываем номер сессии и например IP клиента в БД. 3)Ставим куки с ID сесии. 4)Каждый раз проверяем наличие ID из куки в БД и совпадение IP. Ну вот и все, осталось только организовать для всех доменов доступ к одной БД
есть у нас блоги на wordpress MU (*.blogs.com). Есть форум VB(forum.ua). Есть самописный сайт (site.net). Мы хотим при авторизации на сайте слать куку сайта ,форума, блогов. Не жирно ли? Ну да ладно, мы можем это сделать, благо сайт самописный. В случае со сторонним движком нужно будет искать где эта печенька отправляется и тулить отправку своих. Возможно делать хак для VB и плагин для WP. Хочется чтоб все работало без всех этих манипуляций. У меня получалось без изменения кода VB делать совместную авторизацию на сайте (site.com) и форуме (forum.site.com). Нужно было только в Вобле ставить галочку "запомнить меня". Хотя с другой стороны, механизмы авторизации у WP и VB заведомо разные. И что-то одно из этого ковырять по-любому придется.
Идея кода и решения очень хороша в своей простоте. Вот только не работает почему-то. У меня класс авторизации, который вызывается на всех поддоменах с доменом domen.com (например). на поддомене auth.domen.com вызываю функцию, которая указанным выше способом определяет куки, на поддомене client.domen.com пишу echo $_COOKIE["моя_кука "], но все пусто.
Нельзя установить на поддомене кукис видимый для других поддоменов. Это то же самое, что ставить куку с одного домена на другом. Таки способом кукис надо ставить на главной домене, а не поддоменах.
Класс авторизации: кстати, если кому пригодится, то пользуйтесь на здоровье. Код (Text): class Authorization { var $id = ""; var $mysql = ""; //идентификатор класса Mysql var $error = ""; var $usercode = ""; function IsUserExist($login, $pwd="") { $query = ""; $login = strtolower($login); if($login && $pwd) { $query = "select `id`, `usercode` from `user` where (`login`='".$login."') and (`pwd`='".$pwd."')"; } else { $query = "select `id`, `usercode` from `user` where `login`='".$login."'"; } $data = $this->mysql->Query($query); if(mysql_num_rows($data) > 0) { $this->id = mysql_result($data, 0, "id"); $this->usercode = mysql_result($data, 0, "usercode"); return $this->id; } else { return false; } } function GetDateKoef() { list($y, $m, $d) = explode(":", date("Y:m:d")); return round(abs(($y*$m)/$d)); } function GetIpMas() { $ip = $_SERVER['REMOTE_ADDR']; $ips = explode(".", $ip); $ip = implode("", $ips); return $ip; } function GetUserCheck($us_id) { return md5($this->GetDateKoef().$us_id.$this->GetIpMas.$this->usercode); } function SetLoggedUser() { setcookie(AUTH_ID, $this->id."", 0, '/', '.'.SITE_HOST); setcookie(AUTH_CHECK, $this->GetUserCheck($this->id)."", 0, '/', '.'.SITE_HOST); } function OutLoggedUser() { setcookie(AUTH_ID, ""); setcookie(AUTH_CHECK, ""); } function IsLoggedIn() { $res = false; $cook = $_COOKIE[AUTH_ID]; $cook_ks = $_COOKIE[AUTH_CHECK]; if($cook) { if ($this->GetUserCheck($cook) == $cook_ks) { $res = $cook; } } return $res; } function Authorization($mysql, $login="", $pwd="") { $this->mysql = $mysql; $this->error = ""; if($login) { if($this->IsUserExist($login, $pwd)) { $this->SetLoggedUser(); } else { $this->error = "User is not registered!"; } } else { $this->error = "No login!"; } } }
Константы AUTH_ID и AUTH_CHECK задаются в каком-нибудь файле настроек и определяют названия куков. (это для последующих эксплуататоров) Авторизация, понятное дело, проходит следующим образом: Код (Text): $mysql = new Mysql(); $mysql->Connect(); $auth = new Authorization($mysql, $login, $pwd); $mysql->Disconnect(); Проверка пользователя: Код (Text): $mysql = new Mysql(); $mysql->Connect(); $auth = new Authorization($mysql); if(!$auth->IsLoggedIn()) { $mysql->Disconnect(); header("Location: ".SITE_URL."error.php"); exit(); } Вот и получается, что SITE_URL и SITE_HOST - это соответственно url и хост главного домена domen.com, вызов проверки пользователя производится на client.domen.com Не могу понять, почему не видна кука. Делаю все на локале, естественно.
о я чёт пропутил тему... Так, а что если, создать создать промежуточную табличку, с единственной записью неактивной сессии т.е. алгоритм такой, на сайте с авторизацией в эту табличку(если она пуста) заноситься запись с нашей сессией, юзер перенаправляется на дочерний сайт, который берёт эту неактивную сессию, ставит куку и пр.(уже у себя), табличку очищает В табличке может быть только одна запись, так что воможны задержки, но это всё можно настроить и свести к минимуму, сделать всякие тайм ауты и проверки