Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przenoszenie sesji między serwisami, Ta sama sesja na rożnych serwerach
wojto
post
Post #1





Grupa: Zarejestrowani
Postów: 158
Pomógł: 0
Dołączył: 29.06.2003
Skąd: Warszawa

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


Witam,
Tworze serwis, ktory ma sie skladac z kilku podserwisow, np. profil.xxx.pl (glowna strona serwisu), gry.xxx.pl, mp3.xxx.pl itp. Kazdy z tych podserwisow bedzie umieszczony na innym serwerze, ale maja miec wspolna baze danych z profilami uzytkownikow.
Korzystanie ze wspolnej bazy danych z profilami mam juz zrobione, ale problem jest podczas logowania, bo podczas przechodzenia pomiedzy serwisami na kazdym z nich tworzona jest nowa sesja, a ja chce, aby ciagle byla ta sama sesja.

Narazie rozwiazalem to w ten sposob, ze identyfikator sesji przekazuje w linku, czyli np. bedac w serwisie gry.xxx.pl klikajac w link profil.xxx.pl/sesja=34rh43uirh34ruih34rui43rhr34r wchodze na serwis profilu i tam sobie skryptem pobieram i tworze sesje o identyfikatorze z tego linka.
Problem pojawia sie, gdy np. zaloguje sie w profil.xxx.pl i nie przejde do podstrony po linku gry.xxx.pl?sesja=3urhi34uhr3i4urh3i4rhu tylko wpisze bezposrednio gry.xxx.pl, wtedy tworzy losowa sesje.

Probowalem korzystac z session.cookie_domain, ale ono moze korzystac z jednoelementowych adresow z .com, np. xxx.com, musialo by byc cos.xxx.com.

Czy jest jakis inny sposob, aby logujac sie na jednym serwisie byc jednoczesnie zalogowanym na innym? Oba serwisy oczywiscie na innych serwerach :/

Dzieki za ewentualne odpowiedzi.
Go to the top of the page
+Quote Post
nrm
post
Post #2





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


1. sesid w urlu to kiepski pomysł.

2. a wlasny session-handler nie daje rady? baza z sesjami musiala by tylko stac na jednym z serwerów. napisalem cos takiego i tez ma działać na kilkunastu podserwisach portalu. wprawdzie jeszcze nie testowałem w sieci ale niesądziłem, że może byc z tym jakiś problem.
Go to the top of the page
+Quote Post
bregovic
post
Post #3





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

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


Ok, jeżeli tylko wszystkie strony znajdują się na jednej domenie to da się to zrobić. Jeśli używasz własnego session handlera, to używasz zapewne metody setcookie" title="Zobacz w manualu php" target="_manual().

Cytując:
Cytat(http://php.net/manual/en/function.setcookie.php)
To make the cookie available on all subdomains of example.com then you'd set it to '.example.com'. The . is not required but makes it compatible with more browsers. Setting it to www.example.com  will make the cookie only available in the www  subdomain. Refer to tail matching in the spec for details.


Czyli w twoim przypadku:
  1. <?php
  2. setcookie('name', 'value', expire, '/', '.xxx.pl');
  3. ?>


Natomiast jeśli strony znajdują się na różnych domenach, to jesteś ugotowany (nie wydaje mi sie żeby można było coś wtedy zrobić).
Go to the top of the page
+Quote Post
wojto
post
Post #4





Grupa: Zarejestrowani
Postów: 158
Pomógł: 0
Dołączył: 29.06.2003
Skąd: Warszawa

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


@normanos: zgadza sie, baza z uzytkownikami stoi tylko na jednym serwerze i wszystkie inne erwisy z niej korzystaja
wlasna obsluga sesji oczywiscie jest, ale co z tego, skoro identyfikator tej sesji jest gubiony przy przejsciach miedzy serwisami

@bregovic: no wlasnie jest problem, bo strony znajduja sie na roznych domenach :/
Go to the top of the page
+Quote Post
bregovic
post
Post #5





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

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


Wydaje mi się to niemożliwe bez przekazywania identyfikatora po linkach - a to głupi pomysł (sniff).
Go to the top of the page
+Quote Post
nrm
post
Post #6





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


cholera. przyznam, że zainteresował mnie problem. mam cos podobnego, wlasny session handler oparty na bazie. cookies bezposrednio nie uzywam (funkcje php sie tym zajmuja). sprawdzilem i rzeczywiscie tworza mi sie osobne sesje na domena.pl i subdomena.domena.pl

cow takim wypadku zrobic?
dalem
ini_set('session.cookie_domain', '.domena.pl');
ale nic to nie dało.

edit: sprawdzałem na innym serwerze. wprawdzie tam nie mam subdomen ale sprawdzałem wysyłane nagłówki i tam nagle pojawia się

PHPSESSID=3d5207c3d2862136b74df97ea428ebe3; path=/; domain=.domena.pl

w przeciwienstwie do mojego serwera gdzie najwyrażniej ini_set jest ignorowany.
mozna coś jeszcze z tym robic czy juz mam szukac nowego serwera? (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) (

Ten post edytował normanos 13.11.2005, 12:23:15
Go to the top of the page
+Quote Post
NuLL
post
Post #7





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


IMHO jedyne sluszne rozwiazanie to jakies niceUrl's oraz dodawanie na koncu adresu identyfikatora sesji.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Cytat
w przeciwienstwie do mojego serwera gdzie najwyrażniej ini_set jest ignorowany.
mozna coś jeszcze z tym robic czy juz mam szukac nowego serwera? (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) (

void session_set_cookie_params ( int lifetime [, string path [, string domain [, bool secure]]] )
?
Go to the top of the page
+Quote Post
wojto
post
Post #9





Grupa: Zarejestrowani
Postów: 158
Pomógł: 0
Dołączył: 29.06.2003
Skąd: Warszawa

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


@normanos: jezeli ta funkcja, ktora podal dr_bonzo nie zadziala, to znaczy, ze nie mozesz pewnie zmieniac ustawien domeny ciastek.

Ja wczesniej wpadlem na jeszcze inny sposob:
Z baza danych laczysz sie bezproblemowo z obu serwisow. W takim razie wchodzac na subdomena.domena.pl zapisujesz do bazy nowa sesje i dodatkowo hash informacji o tobie (ip, przegladarka itp.), np.
  1. <?php
  2. $_SERVER['REMOTE_ADDR'].sha1(gethostbyaddr($_SERVER['REMOTE_ADDR']).
  3. (isset($_SERVER['HTTP_X_FORWARDED_FOR'])?$_SERVER['HTTP_X_FORWARDED_FOR']:'').
  4. $_SERVER['HTTP_USER_AGENT'])
  5. ?>

nastepnie wchodzac na domena.pl za pierwszym razem zapewne sprawdzasz, czy sesja istnieje, jesli nie, to tworzysz losowy identyfikator, tutaj wystarczy dac kolejnego if'a jesli sesja nie istnieje, to sprawdzasz w bazie, czy istnieje sesja i takim hashu jak teraz masz, jesli tak, to pobierasz jej identyfikator i tworzysz nowa sesje o pobranym ID.

U mnie by to dzialalo, tylko problem byl z tym, ze czasami pozostawaly jakies smiecie z poprzednich logowan tego usera, wsrod tych smieci byly tez stare sesje tego uzytkownika (ktore by zapewne zostaly usuniete po wykonaniu gc()). Wiec problem byl z wylogowaniem, bo znajdowal stara sesje.

Ten post edytował wojto 13.11.2005, 13:50:12
Go to the top of the page
+Quote Post
nrm
post
Post #10





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


1. tak, własnie wlazłem tu napisac, że udało mi się to rozwiązac przez session_set_cookie a widze, że i inni na to wpadli (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) chyba działa - chyba bo patrze po nagłówkach, chwilowo nie mam środowiska do testowania.

@wojto: ciekawe ale ja akurat korzystam z sesji wbudowanych w php tylko podmienilem je sobie na baze zamiast plików i dodałem kilka potrzebnych rzeczy (ip, user, useragent, lokalizacja). w tym wypadku nie zajmuje sie tworzeniem identyfikatorów sesji etc. bo tym nadal sie zajmuje php. ja tylko podmienilem funckje _read, _write, _open, _close, _gc etc.

cóż, grunt ze działa mi to w obrebie jednej domeny. wprawdzie calośc będzie w 2 kopiach na roznych domenach ale jako ze maja to byc niezalezne serwisy to nie jest to takie istotne.
Go to the top of the page
+Quote Post

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: 3.10.2025 - 01:44