Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ta sama sesja na roznych domenach, Dla ambitnych :)
Seth
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Mam taki ciekawy problem do rozgryzienia ktorym chcialem sie z Wami podzielic.

Calosc rozchodzi sie o uwierzytelnianie uzytkownika na roznych domenach.
Zalozmy, ze mamy serwis na domenie example.com
Na nim dokonuje sie autoryzacja uzytkownika.
Uzytkownik po kliknieciu na link, kierujacy go do innej domeny (example.pl) ma byc juz zalogowany z tymi samym loginem i uprawnieniami co na bazowej domenie.

Oczywiscie nie da sie ustawic ciasteczka sesyjnego dla kilku domen, wiec ten spsob odpada.

Serwisy nie posiadaja zcenralizowanego mechanizmu przechowywania sesji, a wiec nie mozna tez od tak przekazac ID sesji np po przez URL.



Resaumujac wyglada to tak: loguje sie na serwisie excample.com, przechodze na serwis example.pl i jestem zalogowany z tym samym loginem co na example.com.


Moim pomyslem na rozwaizanie tego problemu jest nastepujacy:

Serwis example.com, w momencie gdy uzytkownik sie zaloguje, serwuje mu strone - strona ta zawiera odwolanie do skryptu PHP generujacego przezroczysty obrazek 1x1 px.
Serwis ten przekazuje w parametrze np. <img src="http://example.pl/activate.php?sesid=123" ... /> zmienna sesid.
Okresla ona ID sesji na serwerze example.com
W momencie kiedy zostaje wywolany skrypt active.php (ktory jest tak naprawde obrazkiem) pobierana jest zmienna sesid.
Nastepnie skrypt uruchamia sesje (session_start()).
Pozniej sprawdza czy istnieje zmienna np. $_SESSION['auth'] ktora ma wartosc true - po to aby sprawdzic czy przypadkiem juz wczesniej nie zostala aktywowana sesja (czy wczesniej nie bylo wywolania tego skryptu).
Jezeli nie ma takiej zmiennej, skrypt odsyla wartosc zmiennej sesid do serwera example.com w celu zweryfikowania czy sesja jest autentyczna.
Tutaj mozna uzyc albo WebServices albo po prostu wywolac adres http://example.com/is_valid?sesid=<i tutaj wartosc zmiennej sessid przekazana do skryptu activate.php> - w odpowiedzi dostali bysmy np '1'
Jezeli jest ustawia zmienna $_SESSION['auth'] na true.

Dzieki temu sesja moze byc niejako przekazywana miedzy domenami.


Co o tym sadzicie, jakie sa Wasze pomysly?


P.S.
Jezeli cos jest neizrozumiale prosze pytac (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował Seth 25.11.2007, 23:59:26
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kocurro
post
Post #2





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Seth: No faktycznie Ajax odpada, Java pewnie także. Więc pozostaje tylko iframe lub obrazek. Iframe'ów nie lubię bo brzydko się zachowują jak są błędy więc użyję obrazka. Przy okazji wykorzystam onError i onLoad (czy jak to się zwie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ) - będzie można odpowiednio zareagować jak będzie błąd. Może zrobię tak, że jak błąd wyskoczy to header Location przepuszcze ... jeszcze zobaczę.

Aż dziw bierze, że do dziś dnia nie opracowali jakiegoś prostego sposobu by problem rozwiąząć. Np.

Na serwisie X wysyłam coś z informacją, że do tego cosia można się odwoływać z domen Z, Y, W. I potem pod tymi domenami spokojnie cosia odczytuję i voila. Nie jest to trudne do zaimplementowania a jakże pomocne by było ...

Krowal: Zakładam, że te sesje są w bazie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Na takie "machlojki" najlepiej napisać uniwersalną klasę, która za nas zrobi co należy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował Kocurro 26.11.2007, 21:09:34
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 13:57