IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Межсайтовая авторизация (http://www.imho.ws/showthread.php?t=106341)

andrei solovjev 25.07.2006 22:08

Межсайтовая авторизация
 
Сабж. Как сделать? Есть несколько мыслей.
1. Редирект по всем сайтам, при авторизации на одном.
2. Использовать JAVASCRIPT, т.к. выполняется в браузере, то по идее должен иметь доступ ко всем кукам. Но в нем я не особо.
3. AJAX. Возможно изврат, но при авторизации на одном сайте, обращаться к другому, на котором заводить куку. При заходе в любой другой сайт, обращаться к тому и проверять на наличие куки.

RaZEr 25.07.2006 22:13

include 'http://primarysite.ru/auth.php';
if (believe_in_me($login,$pass))
{
...
}

Псих 26.07.2006 00:00

если сайты лежат на одном сервере, можно юзать сессии.
Если нет, общие функции авторизации и общую табличку юзеров как написал Razer

andrei solovjev 26.07.2006 22:25

В моем случае все не так страшно, т.к. все сайты на одном сервере. К счастью, проверено доступ к сесси по SID работает при переходе на другой сайт. Думаю сделать при авторизации на одном из сайтов - переадресация на другой (если не передался SID), где генерировать SID и куку. При пререходе на другие сайты - переадресация на тот сайт, где все заводил, получать из куки ID сессии, возвращать его назад. Итого 0 или два редиректа. Плохо по скорости и могут быть проблемы с файерволами.

Хотелось бы более универсального решения, если сайты не на одном сервере. Куки с одного сайта недоступны на другом. А SID не всегда подходит, например если посетитель вручную вводит адрес.

Псих 27.07.2006 01:43

Простите, немного не понял... при переходе между сайтами сессия не сохраняется?

andrei solovjev 27.07.2006 08:59

Сессия сохраняется, не сохраняется механизм передачи идентификатора через куки (проверено), только через URL, что не подходит, поскольку посетитель может ввести название сайта руками, и тогда ему придется заново авторизовываться.

Псих 27.07.2006 09:32

Смотри
при логине делаешь:
PHP код:

session_start();
$qr mysql_query("select id from users where name = '".mysql_real_escape_string($_POST["name"], $db)."' and password = '".md5($_POST[""password])."'"$db);
if (
$qr && mysql_num_rows($qr) == 1){
     
$user mysql_fetch_assoc($qr);
     
mysql_free_result($qr);
     
$_SESSION["user_id"] = $user["id"];


А потом на сайте уже вынимаешь данные юзера по id
PHP код:

$qr mysql_query("select * from users where id = ".$_SESSION["user_id"]); 

Такая схема не работает?

andrei solovjev 27.07.2006 22:10

Как php узнает, что в $_SESSION["user_id"], если не передался ни SID(пользователь ввел адрес руками) ни кука (т.к. это другой сайт)?
Получится такой запрос:
select * from users where id =

Stasik 28.07.2006 01:04

а ты проверяй и если что new_session....

Псих 28.07.2006 09:36

andrei solovjev
Да ему не надо узнавать. Ты сказал что
Цитата:

Сессия сохраняется
, значи т и елементы массива сессий должны сохранятся. И в параметрах запроса ничего менять не надо

Face 28.07.2006 12:11

Псих
andrei solovjev имеет в виду другое: допустим на сайт site1.lan пользователь залогинился, ему выдается некий SID, который сохранился в куках... так вот, как на сайте site2.lan узнать этот SID, чтобы по нему вытащить инфу из сессий?

andrei solovjev
Как вариант, SID можно передать так: на site1.lan делаем невидимый iframe с адресом site2.lan/cookie.php?SID=SID

Псих 28.07.2006 16:11

Почему другой. Если сессии от двух сайтов хранятся в одной папке, что происходит если два сайта крутятся на одном сервере, то сессия не должна быть другой!

Face 28.07.2006 19:03

Псих, про сервер ты правильно написал, но тут то проблема другая, которая должна решаться на уровне браузера - как передать одному сайту идентификатор сессии другого сайта

Псих 28.07.2006 19:12

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

RaZEr 28.07.2006 19:46

С какого ещё диска? :)

Псих 29.07.2006 13:45

RaZEr
Ну если сессия хранится на диске.. на серваке.
сессия не передается постоянно в строке. читал я такое где-т .. помоему на пхпклюб.ру

Face 29.07.2006 14:22

Псих
id сессии пытается передаться по кукам, если у браузера отключены куки, то ее id передается методом GET

RaZEr 29.07.2006 14:31

Цитата:

Ну если сессия хранится на диске.. на серваке.
Она всегда (почти всегда) храниться на диске сервера.

Если нужно авторизоваться на одном сайте, и записанную сессию распостранить на другой сайт того же сервера, то лучше её передавать не в куках (т.к. foreign cookies могут быть заблокированый стенкой), а в строке запроса.

andrei solovjev 30.07.2006 23:05

FACE:
>>Как вариант, SID можно передать так: на site1.lan делаем невидимый >>iframe с адресом site2.lan/cookie.php?SID=SID

Походит если сайтов не много, а если их скажем уже 10? Большая нагрузка на браузер и траффик.

Face 30.07.2006 23:15

andrei solovjev еще варианты - привязка аккаунта к ip... либо если сайты будут поддоменами основного - ставить cookies на основной домен

Псих 31.07.2006 00:09

Цитата:

RaZEr:
а в строке запроса.
Если мне память не изменяет, есть дериктива(опция) в настройках php(php.ini) что сессия передается постоянно в адресной строке...

usa 15.08.2006 23:36

Мне кажется, что вариант только один, это уведомление (из ифрэйма или по JS) всех остальных сайтов (на которые нужна одна авторизация), что пользователь авторизировался (т.е. обновятся/создадутся куки) и клиент ничего не заметит.

Однако в куках нужно указать время жизни, что-бы браузер их не убрал.


Часовой пояс GMT +4, время: 23:26.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.