![]() |
Межсайтовая авторизация
Сабж. Как сделать? Есть несколько мыслей.
1. Редирект по всем сайтам, при авторизации на одном. 2. Использовать JAVASCRIPT, т.к. выполняется в браузере, то по идее должен иметь доступ ко всем кукам. Но в нем я не особо. 3. AJAX. Возможно изврат, но при авторизации на одном сайте, обращаться к другому, на котором заводить куку. При заходе в любой другой сайт, обращаться к тому и проверять на наличие куки. |
include 'http://primarysite.ru/auth.php';
if (believe_in_me($login,$pass)) { ... } |
если сайты лежат на одном сервере, можно юзать сессии.
Если нет, общие функции авторизации и общую табличку юзеров как написал Razer |
В моем случае все не так страшно, т.к. все сайты на одном сервере. К счастью, проверено доступ к сесси по SID работает при переходе на другой сайт. Думаю сделать при авторизации на одном из сайтов - переадресация на другой (если не передался SID), где генерировать SID и куку. При пререходе на другие сайты - переадресация на тот сайт, где все заводил, получать из куки ID сессии, возвращать его назад. Итого 0 или два редиректа. Плохо по скорости и могут быть проблемы с файерволами.
Хотелось бы более универсального решения, если сайты не на одном сервере. Куки с одного сайта недоступны на другом. А SID не всегда подходит, например если посетитель вручную вводит адрес. |
Простите, немного не понял... при переходе между сайтами сессия не сохраняется?
|
Сессия сохраняется, не сохраняется механизм передачи идентификатора через куки (проверено), только через URL, что не подходит, поскольку посетитель может ввести название сайта руками, и тогда ему придется заново авторизовываться.
|
Смотри
при логине делаешь: PHP код:
PHP код:
|
Как php узнает, что в $_SESSION["user_id"], если не передался ни SID(пользователь ввел адрес руками) ни кука (т.к. это другой сайт)?
Получится такой запрос: select * from users where id = |
а ты проверяй и если что new_session....
|
andrei solovjev
Да ему не надо узнавать. Ты сказал что Цитата:
|
Псих
andrei solovjev имеет в виду другое: допустим на сайт site1.lan пользователь залогинился, ему выдается некий SID, который сохранился в куках... так вот, как на сайте site2.lan узнать этот SID, чтобы по нему вытащить инфу из сессий? andrei solovjev Как вариант, SID можно передать так: на site1.lan делаем невидимый iframe с адресом site2.lan/cookie.php?SID=SID |
Почему другой. Если сессии от двух сайтов хранятся в одной папке, что происходит если два сайта крутятся на одном сервере, то сессия не должна быть другой!
|
Псих, про сервер ты правильно написал, но тут то проблема другая, которая должна решаться на уровне браузера - как передать одному сайту идентификатор сессии другого сайта
|
Сессия, если не записана в кукис указывается единожды в стоке браузера, последующие разы она автоматом подключается из кукисов или с диска
|
С какого ещё диска? :)
|
RaZEr
Ну если сессия хранится на диске.. на серваке. сессия не передается постоянно в строке. читал я такое где-т .. помоему на пхпклюб.ру |
Псих
id сессии пытается передаться по кукам, если у браузера отключены куки, то ее id передается методом GET |
Цитата:
Если нужно авторизоваться на одном сайте, и записанную сессию распостранить на другой сайт того же сервера, то лучше её передавать не в куках (т.к. foreign cookies могут быть заблокированый стенкой), а в строке запроса. |
FACE:
>>Как вариант, SID можно передать так: на site1.lan делаем невидимый >>iframe с адресом site2.lan/cookie.php?SID=SID Походит если сайтов не много, а если их скажем уже 10? Большая нагрузка на браузер и траффик. |
andrei solovjev еще варианты - привязка аккаунта к ip... либо если сайты будут поддоменами основного - ставить cookies на основной домен
|
Цитата:
|
Мне кажется, что вариант только один, это уведомление (из ифрэйма или по JS) всех остальных сайтов (на которые нужна одна авторизация), что пользователь авторизировался (т.е. обновятся/создадутся куки) и клиент ничего не заметит.
Однако в куках нужно указать время жизни, что-бы браузер их не убрал. |
Часовой пояс GMT +4, время: 23:26. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.