Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Java][PHP][inne]przekazanie ID sesji bez "doczepiania" do URLa
Forum PHP.pl > Forum > Przedszkole
currara
Czesc,

jest taki scenariusz:
uzytkownik loguje sie do portalu X, zostaje uwierzytelniony. Wyswietla mu sie link. Klika na ten link i wyswietla mu sie strona na portalu Y.
Czy jest mozliwe przekazanie ID sesji z portalu X do Y, bez doczepiania do URLa ID sesji?

Dzieki,
Boroowa
Ulysess
hmm nie jestem pewien ale wydaje mi się że do tego można wykorzystać CURLa , w momencie zaalogowania na portalu A wysyłane są dane CURLem do portalu B , tam weryfikowane i jeśli poprane tworzy sesje ale tak jak pisałem , nie jestem pewien czy do tego można bezpiecznie CURLa wykorzystać.
Sephirus
Wszystko zależy wink.gif Czy obie strony są ze sobą powiązane? Czy masz dostęp do obu?

Poza tym o które id sesji chodzi? czy portal X i Y działają na tych samych sesjach? Czy chodzi o id sesji portalu Y?

Wg mnie to nie możliwe w żaden sposób jeśli portale są niezależne od siebie... rozpisz się troszkę na jakimś konkretnym przykładzie :/

by_ikar
Można np tak jak kolega wyżej napisał przesłać ID jakimś curlem tyle że wówczas aby sesja ci się utworzyła dla danej domeny, ta domena musi zostać wyświetlona. Można np zrobić jakąś ramkę (iframe) i w niej wywołać stronę. Można dane wysłać postem, ale tutaj już musi użytkownik mieć włączony javascript itp. Rozwiązań jest trochę, ale czy są one dobre, nie mnie to oceniać wink.gif Nie takim głupim pomysłem było by wysyłanie jakby 2 formularzy logowania, jeden do jednej strony, drugi do drugiej. Tyle że problem pojawia się kiedy takich stron byłoby więcej biggrin.gif wtedy takich formularz byłoby sporo nawet wink.gif
currara
To teraz dokladniej smile.gif

Uzytkownik loguje sie na portalu X, zostaje uwierzytelniony, tworzona jest sesja i wyswietlany jest link do raportu na portalu Y (portale sa od siebie niezalezne). Uzytkownik klika na link, portal Y dostaje ID sesji(token). Zeby sprawdzic, czy token jest prawidlowy, odpytuje Web Service portalu X. Jesli jest prawidlowy, zwracany jest ID usera. Jesli taki uzytkownik istnieje w bazie portalu Y, to raport zostaje otworzony.
Moim zdaniem, aby portal Y dostal token, po kliknieciu na link, to musi on zostac dolaczony w urlu. Jednak dzisiaj ulyszalem, ze taki token moze zostac przekazany w header request'cie, jednak chyba w tej sytuacji nie da rady tak zrobic, a moze sie myle.
Uzycie curla odpada.
by_ikar
Nie da się bez wywołania danej strony ustawić jej ciastko. Ciastka są ograniczone do zapisu jak i odczytu tylko i wyłącznie w obrębie domeny. Dlatego pisałem albo ramka, albo formularz który wysyła puste dane za pomocą JS dzięki czemu odbywa się to w tle. A jeżeli oba portale są niezależne, możesz stworzyć osobną tabelę która będzie na obu stronach i przechowywać w niej tylko i wyłącznie informacje czy dany jużer jest zalogowany, a same dane logowania przesyłać np postem w formularzu kiedy się logujesz. Nie wiem czy jest inna metoda, wiem że dla innej strony nie utworzysz ciastka, jeżeli jej nie odwiedzisz, jest jedno z zabezpieczeń ciasteczek. Tak czy inaczej, te dane które wysyłasz zarówno postem, jak i getem tak czy siak idzie podejrzeć chociażby firebugiem.

widzę dwa wyjścia jak narazie:

- iframe z linkiem w którym są umieszczone dane takie jak ID sessji

- 2 formularze, jeden który wysyła się do strony na której się jest, i drugi który wysyła javasctip z danymi do zalogowania

Może są inne metody, ale tak czy siak, musisz stronę X jak i Y odwiedzić aby móc utworzyć ciasteczko, za pomocą języków server side nie osiągniesz tego typu możliwości, bo wtedy ciasteczko zostałoby utworzone dla serwera który wysłał zapytanie do drugiego serwera. Coś w ten deseń.

Najlepsze wyjście z tego wszystkiego to 2 formularze, stworzyć akcje w JS która będzie po kliknięciu na button wysyłać dodatkowy formularz tyle że pod inny adres, ale dane będzie pobierać z inputów które są w aktualnym formularzu logowania, tylko nie wiem jak wygląda sprawa z pobraniem takiego hasła, ale chyba można pobrać za pomocą js. W jquery zrobić coś takiego to kilka linijek kodu.

EDIT:
Google rozwiązało ten problem za pomocą ramek. No tak ramki działają wszędzie JS nie wszędzie. Wylogowujesz również za pomocą ramek. Także widzisz, jakby były inne sposoby to i google by z tych innych sposobów skorzystało wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.