кроссдоменная авторизация

Fallen

Новичок
Здравствуйте!
Возможно то, что спрошу - очень глупо, но всё же, надеюсь на ответ:

имеется два сайта на разных доменах:
http://a.ru
http://b.ru

оба сайта используют одну и ту же внешнюю СУБД, в которой хранятся логины-пароли пользователей, так же на обоих сайтах переписан механизм сессий для хранения их в этой самой СУБД...
вопрос в том, что что когда в браузере открываем оба сайта - в таблице сессий для них создаются разные, независимые записи, соответственно теряются данные авторизации (хранятся в сессиях), т.е. если человек авторизовался на a.ru - а затем зашёл на b.ru, то данные авторизации потерялись, и ему необходимо авторизоваться снова...хотелось бы, чтобы авторизация сохранялась одна и та же для обоих сайтов. Возможно ли это реализовать?
 

shelestov

я тут часто
Куки создаются разные для каждого домена, а значит и сессии тоже.
С поддоменами решить проблему проще, установливая общую куку, с обсалютно разными доменами будет сложнее.
 

shelestov

я тут часто
Индификатор сессии php сохраняет в куках.
Поэтому у вас создаются разные сессии для сайтов.
 

Andreika

"PHP for nubies" reader
ну так пусть браузер залогиненного на a.ru пользователя дергает скрипт b.ru/script.php?sessid=12910290192 , который в свою очередь ставит кукисы b.ru с данным SESSID
в преодолении сопротивления некоторых настроек некоторых бравзеров может помочьhttp://ru.wikipedia.org/wiki/P3P
 

shelestov

я тут часто
Лучше при логине на сайте a.ru вызывать javascript с сайта b.ru и логинить пользователя там, и наоборот.
Javascript-у передать индификатор сессии.
Таким образом юзеру сразу поставим и куку сайта a.ru и куку сайта b.ru
 

KOLANICH

Новичок
используй кроссдоменные запросы для получения идентификатора сессии через жс и ставь куку
для этого в .htaccess надо добавить одну строку на обоих сайтах
 

Fallen

Новичок
на сайте a.ru выставляем куку с помощью javascript:

<?
echo "<SCRIPT LANGUAGE=JavaScript src=http://b.ru/set_crossdomain.php></SCRIPT>";

но если следом вывести

echo $_COOKIE['test'];
?>

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

Можно ли это обойти?
 

no_santa

Снегур
Видел такое решение:

1. Флаг авторизации живет в ифрейме.
2. Ифрейм посредством JS передает некоторые ключи на страницу снаружи.
3. Скрипты на странице сверяют ключи и их актуальность с сервером.
 

no_santa

Снегур
Кроссдоменную авторизацию сделать можно, причем есть с добрый десяток способов... Основной вопрос - в безопасности каждого конкретного решения в каждом конкретном случае.
 

KOLANICH

Новичок
KOLANICH, а можно поподробнее?
Header append Access-Control-Allow-Origin: "адрес моего второго сайта"
https://developer.mozilla.org/en/http_access_control
через js получаешь ид сессии (то есть делаешь гет-запрос на скрипт проверяющий логин и дающий ид сессии)
ставишь куку
перезагружаешь страницу
получаем 2 одинаковых ида сессии на разных доменах
так как ты переписал реализацию сессий то получаем залогиненость на 2х доменах
одна сессия
2 куки с её идом для каждого домена
PROFIT!!!
 

eval

Новичок
=) неплохо если учесть что кроссдоменные XMLHTTPRequest запросы в js работают только в новых браузерах ) пользователи с старыми браузерами будут авторизированы только на одном сайте =)

не проще ли передать GET-ом или socket накрайняк тот же с генерированный id сессии ) был у нас с сотрудниками когда-то такой проект, реализация была простая get-ом <img src='maindomain.com?id=id&pass=pass'> передавался id and pass на основной домен и проверялся в базе на наличие и если таковой имелся , раздавался по всем остальным доменам таким же методом ) схема устаревшая и возможно не совсем безопасная на все же рабочая =)
 

KOLANICH

Новичок
те, кто юзают старые браузеры, безнадёжны
к тому же фф 3.5 давно уже не новый браузер
их комп кишит троянами и вирусами, а им пофиг
надо идти вперёд, а не оглядываться назад
а не лучше ли так
<img src='maindomain.com?SID'>
 
Сверху