-
1. Data: 2010-09-12 19:52:12
Temat: Jak zapanować nad sesjami w PHP?
Od: Marek <b...@e...com>
Witam,
Doświadczam ciekawego zjawiska pod IE8. Nie sprawdzałem pod innymi
przeglądarkami. Mam spory problem z rozwiązaniem sytuacji. Otóż otwieram
sobie dwie zakładki do jednego serwisu www w technologii PHP. Adesy są w
postaci:
www.serwis.x
www.serwis.x/admin
Obie zakładki zyskują w PHP inne identyfikatory sesji. W serwisie
www.serwis.x/index.php skrypt startowy zawiera Flasha, który w tle łączy
się z innym skryptem np. www.serwis.x/flash.php Okazuje się, że w skrypcie
flash.php odtwarzany jest zupełnie inny identyfikator sesji niż był on w
index.php ustanowiony. Wraz z cookies został przekazany ID sesji z innej
zakładki: www.serwis.x/admin!!!
Dzieje się tak tylko gdy pierwszy raz wchodzimy na stronę startową, w
sensie, że nie odwiedzaliśmy przedtem żadnej innej wewnętrznej strony
serwisu. Czy ktoś z Was wie jak wymusić przekazywanie właściwego
identyfikatora sesji?
-
2. Data: 2010-09-14 15:40:34
Temat: Re: Jak zapanować nad sesjami w PHP?
Od: Borys Pogoreło <b...@p...edu.leszno>
Dnia Sun, 12 Sep 2010 21:52:12 +0200, Marek napisał(a):
> flash.php odtwarzany jest zupełnie inny identyfikator sesji niż był on w
> index.php ustanowiony. Wraz z cookies został przekazany ID sesji z innej
> zakładki: www.serwis.x/admin!!!
Kombinowanie z różnymi sesjami w ramach tej samej domeny to proszenie się
o kłopoty. Zwłaszcza, gdy adresy się na siebie nakładają.
Użyj jednej sesji i w niej rozróżniaj czego dotyczy - serwisu czy admina.
--
Borys Pogoreło
borys(#)leszno,edu,pl
-
3. Data: 2010-09-14 21:15:06
Temat: Re: Jak zapanować nad sesjami w PHP?
Od: Marek <b...@e...com>
Dnia Tue, 14 Sep 2010 17:40:34 +0200, Borys Pogoreło napisał(a):
> Kombinowanie z różnymi sesjami w ramach tej samej domeny to proszenie się
> o kłopoty. Zwłaszcza, gdy adresy się na siebie nakładają.
>
> Użyj jednej sesji i w niej rozróżniaj czego dotyczy - serwisu czy admina.
Sęk w tym, że to nie ja kombinuję lecz przeglądarka + PHP. To naturalny
sposób funkcjonowania tego mechanizmu. Wymuszenie tej samej sesji to jest
dopiero kombinowanie. Trzeba to specjanie oprogramowywać i chyba zawsze
będzie szwankować.
-
4. Data: 2010-09-15 11:16:25
Temat: Re: Jak zapanować nad sesjami w PHP?
Od: "William Bonawentura" <n...@i...pl>
Użytkownik "Marek" <b...@e...com> napisał w wiadomości
news:10n397sauf42u$.15wnth0ldc7z0$.dlg@40tude.net...
> Dnia Tue, 14 Sep 2010 17:40:34 +0200, Borys Pogoreło napisał(a):
>
>
>> Kombinowanie z różnymi sesjami w ramach tej samej domeny to proszenie
>> się
>> o kłopoty. Zwłaszcza, gdy adresy się na siebie nakładają.
>>
>> Użyj jednej sesji i w niej rozróżniaj czego dotyczy - serwisu czy
>> admina.
>
> Sęk w tym, że to nie ja kombinuję lecz przeglądarka + PHP. To naturalny
> sposób funkcjonowania tego mechanizmu. Wymuszenie tej samej sesji to jest
> dopiero kombinowanie. Trzeba to specjanie oprogramowywać i chyba zawsze
> będzie szwankować.
>
W takim razie musisz sobie podebugować jakie cookies i z jakimi parametrami
ścieżki są ustawiane (np. CookieMonster w Firefoxie).
-
5. Data: 2010-09-15 12:11:52
Temat: Re: Jak zapanować nad sesjami w PHP?
Od: Marek <b...@e...com>
Dnia Wed, 15 Sep 2010 13:16:25 +0200, William Bonawentura napisał(a):
> W takim razie musisz sobie podebugować jakie cookies i z jakimi parametrami
> ścieżki są ustawiane (np. CookieMonster w Firefoxie).
No dobrze, zerknąłem z ciekawości. Chyba coś nie działa najlepiej ten
dodatek. Mam jedno cookies z danej domeny a w nazwie, zawartości itp
wyświetla się "nie zaznaczono ciasteczka" choć klikam na nim do upadłego.
Gdy wszedłem w obszary serwisu gdzie wygenerowałem samodzielnie dodatkowo
dwa inne ciasteczka: pokazuje mi się zawartość tylko jednego. Gdy klikam na
pozostałych, to cały czas pokazuje mi tylko stan tego pierwsze. (Windows 7
x64). Gdy usunę pierwsze, to dwa pozostałe nie zawierają żadnych informacji
(choć to nieprawda).
Zerknij np. tu http://www.chlopskiejadlo.pl/main.php i zobacz cookies. Nie
mozna odczytać PHPSESSID, screenWidth, _utma. Pokazuje stany innych
ciasteczek.
Wracając do wątku: w czym miałaby mi pomóc ta informacja? PHP wysyła
cookies takie jak wysyła a przeglądarka je tylko zapisuje i odczytuje w
celu przesłania z powrotem do PHP w kolejnych zapytaniach. Wygląda to tak
jakby powstawał hazard w chwili jednoczesnego (i tylko wtedy) otwierania
dwóch zakładek. Gdy otworzymy jedną zakładkę a potem drugą (ręcznie) to
zjawisko nie wystąpi. Gdy ręcznie sprawdziłem oba ciasteczka, to wyglądają
ok. Jedno z nich jest dla ścieżki / a drugie /admin.
Ta zakładka, która się wczyta jako druga tak jakby nadpisywała cookie tej
pierwszej (w trybie automatycznego otwierania zakładek). No i dzieje się to
tylko przy otwieraniu browsera, jak wspomniałem. Gdy poruszamy się potem w
obrębie obu zakładek już nie ma efektu mieszania cookies.
-
6. Data: 2010-09-15 16:44:12
Temat: Re: Jak zapanować nad sesjami w PHP?
Od: Borys Pogoreło <b...@p...edu.leszno>
Dnia Wed, 15 Sep 2010 14:11:52 +0200, Marek napisał(a):
> Zerknij np. tu http://www.chlopskiejadlo.pl/main.php i zobacz cookies. Nie
> mozna odczytać PHPSESSID, screenWidth, _utma. Pokazuje stany innych
> ciasteczek.
U mnie wszystko OK. 6 ciasteczek, każde wygląda poprawnie.
> zjawisko nie wystąpi. Gdy ręcznie sprawdziłem oba ciasteczka, to wyglądają
> ok. Jedno z nich jest dla ścieżki / a drugie /admin.
Powtarzam - nie kombinuj z ciasteczkami, gdzie nakładają się ścieżki.
Efekty mogą być różne i niekoniecznie takie, jakich sobie życzysz.
Nie kombinowałem nigdy z Flashem + sesje, ale czy on potrafi poprawnie
pobrać PHPSESSID by później wszystkie zapytania wysyłać z poprawnym
ciasteczkiem? Czy automatycznie dostaje własną sesję, bo nic nie wysyła?
--
Borys Pogoreło
borys(#)leszno,edu,pl
-
7. Data: 2010-09-15 18:12:21
Temat: Re: Jak zapanować nad sesjami w PHP?
Od: Marek <b...@e...com>
Dnia Wed, 15 Sep 2010 18:44:12 +0200, Borys Pogoreło napisał(a):
> Dnia Wed, 15 Sep 2010 14:11:52 +0200, Marek napisał(a):
>
>> Zerknij np. tu http://www.chlopskiejadlo.pl/main.php i zobacz cookies. Nie
>> mozna odczytać PHPSESSID, screenWidth, _utma. Pokazuje stany innych
>> ciasteczek.
>
> U mnie wszystko OK. 6 ciasteczek, każde wygląda poprawnie.
A zobacz jak u mnie: :-(
http://img215.imageshack.us/img215/9263/99286252.jpg
Przypuszczam, że z W7 x64 ten plugin nie działa poprawnie.
> Powtarzam - nie kombinuj z ciasteczkami, gdzie nakładają się ścieżki.
> Efekty mogą być różne i niekoniecznie takie, jakich sobie życzysz.
NIE UŻYWAM ciasteczek - raz jeszcze powtarzam :-) One same się używają bo
TAK DZIAŁAJĄ sesje w PHP.
> Nie kombinowałem nigdy z Flashem + sesje, ale czy on potrafi poprawnie
> pobrać PHPSESSID by później wszystkie zapytania wysyłać z poprawnym
> ciasteczkiem?
Flash niczego nie musi pobierać, to PHP mu "daje" ID sesji bezpośrednio do
FlashVars. Potem Flash łączy się z innym skryptem, który debuggingowo
przykazuje swoje ID sesji. Flash wyświetla oba i okazuje się, że zazwyczaj
są inne choć sporadycznie bywają takie same. To jest to zjawisko hazardu o
jakim wspominałem, które występuje tylko wtedy gdy automatycznie na starcie
browsera otwierają się 2 zakładki o adresach do dwóch różnych sekcji
serwisu.
> Czy automatycznie dostaje własną sesję, bo nic nie wysyła?
Flash, a konkretnie plugin nie działa w oderwaniu od browsera. Plugin nie
dubluje funkcji browsera lecz korzysta z jego funkcji w zakresie łączenia
się z siecią. Dlatego masz inne pluginy pod różne przeglądarki. Tak więc de
facto pytasz o to jak działa browser. A browser w tym inicjalnym momencie
działa źle: wysyła cookies z ID sesji z sąsiedniej zakładki.
-
8. Data: 2010-09-15 21:19:10
Temat: Re: Jak zapanować nad sesjami w PHP?
Od: Borys Pogoreło <b...@p...edu.leszno>
Dnia Wed, 15 Sep 2010 20:12:21 +0200, Marek napisał(a):
> NIE UŻYWAM ciasteczek - raz jeszcze powtarzam :-) One same się używają bo
> TAK DZIAŁAJĄ sesje w PHP.
Używasz. Niejawnie czy nie, ale używasz.
I możesz parametry tych ciasteczek sobie zmienić:
http://pl2.php.net/manual/en/function.session-set-co
okie-params.php
Nie wymuszasz gdzieś na ciasteczku sesji ścieżki /admin ?
Ew. w drugą stronę - wymuś /
>> Czy automatycznie dostaje własną sesję, bo nic nie wysyła?
>
> Flash, a konkretnie plugin nie działa w oderwaniu od browsera. Plugin nie
> dubluje funkcji browsera lecz korzysta z jego funkcji w zakresie łączenia
> się z siecią. Dlatego masz inne pluginy pod różne przeglądarki. Tak więc de
> facto pytasz o to jak działa browser. A browser w tym inicjalnym momencie
> działa źle: wysyła cookies z ID sesji z sąsiedniej zakładki.
Pytam tylko jak kwestię ciastek rozwiązali we Flashu, bo ja na niego mam
alergię. Skoro jednak dostaje ID we flashvars, to powinien być tego
świadomy i sobie z tym radzić. Choć w sumie race condition mogłoby wystąpić
- o ile twórcy przeglądarki takiej sytuacji nie przewidzieli (a IMO
powinni).
--
Borys Pogoreło
borys(#)leszno,edu,pl
-
9. Data: 2010-09-16 05:40:33
Temat: Re: Jak zapanować nad sesjami w PHP?
Od: "William Bonawentura" <n...@i...pl>
Użytkownik "Marek" <b...@e...com> napisał w wiadomości
news:wqwg0qshzki6.13x1ay6x6wvh1$.dlg@40tude.net...
> Dnia Wed, 15 Sep 2010 13:16:25 +0200, William Bonawentura napisał(a):
>
>
Mam wrażenie, że obserwujesz styuację gdy request ze ścieżką /admin wysyła
cookie ze ścieżki / (bo jest bardziej ogólna) a z odpowiedzią otrzymuje
setcookie ze ścieżką /admin. Przy kolejnym zapytaniu wysyła już to nowe
cookie z "precyzyjniejszą" ścieżką. Jeśli tak to jest to normlane.
-
10. Data: 2010-09-16 05:41:40
Temat: Re: Jak zapanować nad sesjami w PHP?
Od: "William Bonawentura" <n...@i...pl>
Użytkownik "William Bonawentura" <n...@i...pl> napisał w wiadomości
news:i6saki$dlg$1@news2.ipartners.pl...
>
> Użytkownik "Marek" <b...@e...com> napisał w wiadomości
> news:wqwg0qshzki6.13x1ay6x6wvh1$.dlg@40tude.net...
>> Dnia Wed, 15 Sep 2010 13:16:25 +0200, William Bonawentura napisał(a):
>>
>>
>
> Mam wrażenie, że obserwujesz styuację gdy request ze ścieżką /admin wysyła
> cookie ze ścieżki / (bo jest bardziej ogólna) a z odpowiedzią otrzymuje
> setcookie ze ścieżką /admin. Przy kolejnym zapytaniu wysyła już to nowe
> cookie z "precyzyjniejszą" ścieżką. Jeśli tak to jest to normlane.
Całkiem możliwe, że rozwiazaniem twojego problemu będzie wymuszenie w tym
PHP aby dla tej dedykowanej sesji "admin" stosował również inną nazwę cookie