![]() |
![]() |
![]() ![]()
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 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 72 Dołączył: 15.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
A co myślicie o zastosowaniu własnego systemu sesji opartego na bazie danych (tej samej dla kilku domen) oczywiście musiałaby mieć możliwość podpięcia się z zewnątrz a nie tylko z localhosta. Wtedy jednorazowe przekazywanie id sesji w url podczas przechodzenia między różnymi domenami miałoby sens. Id sesji byłoby przekazywane raz a potem będąc na domenie tworzymy dla niej ciastko w której przechowujemy to id. Za przechowywanie danych sesyjnych odpowiada klasa napisana specjalnie do obsługi całej sesji użytkownika. Pobiera dane, zapisuje itp (np w formie zserializowanej).
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 22:57 |