Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sesja nie dziala u 3% uzytkownikow strony (Captcha)
barts
post 17.01.2008, 12:14:11
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 8.07.2005

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


Witam,

mam nastepujacy problem: generuje sobie w pliku token.php obrazek:

  1. <?php
  2. $_SESSION['token']= 'text';
  3. // nizej generujemy obrazek
  4. ?>


i w formularzu dodawania:

<img src="token.php">

W przypadku ok. 97% uzytkownikow wyswietla sie obrazek z kodem i ten sam kod maja w sesji.
U 3% obrazek sie wyswietla ale kod nie jest przekazywany do sesji.

Dlaczego tak sie dzieje? Testowalem na konkretnej osobie i zrobilem strone token.php a w niej tylko session_start(); + $_SESSION['token']= 'text';, i druga strona gdzie jest <img src="token.php"> i nizej echo $_SESSION['text'];.
I tekst z pliku token.php nie chce sie zapamietac w sesji, jak wpisze w przegladarce w adresie bezposrednio token.php to sesje zapisuje, a przez <img src="token.php"> nie. Tak sie dzieje tylku u kilku % wszystkich uzytkownikow. Wszyscy uzywaja Windowsa i IE lub Firefoxa.

Czy ktos sie spotkal z takim bledem? Ew. porady dotyczace rozwiazania? Mysle nad tym zeby zamiast <img src="token.php"> wrzucac jakis skrypcik javascript ktory ma wpisane <img src="token.php"> - tak zeby oszukac te oporne przegladarki.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
nevt
post 17.01.2008, 12:53:21
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


coś chyba pokręciłeś w opisie problemu... gdyby było tak jak napisałeś, to nie ma prawa w ogóle działać...
tak zrozumiałem twój opis:

1. masz plik token.php - który:
a ) ustawia zmienną sesji 'token' o wartości 'text'
b ) generuje obrazek z 'text' i zwraca jego kod...

2. masz inny plik, przypuśćmy strona.php, w którym
a ) jako źródła znacznika <IMG> podajesz plik token.php
b ) w dalszej części kodu odwołujesz się do zmiennej sesji 'token' i usiłujesz ją wyświetlić...

a teraz pomyśl przez chwilę, jak działa skrypt strona.php...

1. przeglądarka wywołuje twoją stronkę - w reakcji odpalany jest skrypt strona.php
2. serwer pobiera zmienne sesji - oczywiście w tym momencie zmienna 'token' jest pusta, więc jej wyświetlanie nie ma sensu...
3. przeglądarka dostaje kod HTML wygenerowany przez strona.php
4. wykonując ten kod napotyka znacznik <IMG> i wywołuje skrypt token.php
5. skrypt token.php generuje obrazek i ustawia zmienną sesji 'token'
6. ale przeglądarka dostała swój kod HTML PRZED wywołaniem tego skryptu... więc wartość zmiennej sesji 'token' ma szansę pokazać się dopiero po przeładowaniu / odświeżeniu strony... kiedy ponowanie wywołany zostanie skrypt 'strona.php'

WNIOSEK - może po prostu te 97% userów, po pierwszej nieudanej próbie logowania, odświeża stronkę i wtedy im wszystko działa - więc uznają że to był przypadek ...

Oczywiście możliwe, że to działa inaczej niż ja przedstawiłem - ale to by znaczyło, że twój opis problemu jest błędny lub niekompletny...

Ten post edytował nevt 17.01.2008, 12:54:15


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
barts
post 17.01.2008, 13:11:36
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 8.07.2005

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


Tak, zle opisalem. Oczywiscie jest jaka strona.php na ktorej jest formularz i w nim jest <img src="token.php"> i pozniej <input type="text" name="token">
User ma wpisac kod z obrazka i kliknac wyslij.

I chodzi o to ze mam x osob, ktore wysylaja i wyskakuje im text ze wpisany token jest zly.
Dlatego zrobilem dokladniejszy test - myslalem ze moze naglowki wyswietlajace obrazek powoduja ze u czesci userow nie jest przyjmowana zmienna do sesji.
Testowalem na konkretnej osobie i zrobilem strone token.php a w niej tylko session_start(); + $_SESSION['token']= 'text';, i druga strona gdzie jest <img src="token.php"> i nizej echo $_SESSION['text'];.
Jak wejdziesz na taka strone i ja odswiezysz to w 97% przypadkow wyswietli sie kod z $_SESSION['token']. A reszscie nie wyswietla sie - bo nie maja takiej zmiennej - Zmienna sesyjna w token.php nie jest wrzucana do sesji usera jesli odwoluje sie do pliku przez <img src="token.php">. Kiedy odwoluje sie bezposrednio do token.php wpisujac adres w przegladarce to zmienna jest zapisywana.

Co moze byc przyczyna problemu? Ludzie powylaczali firewalle/antywirusy, maja np. Windowsa XP Sp2 + IE6 + testowali na FF2.

Próbowalem tez zmienna $_SESSION['token'] generowac w strona.php i pozniej przez <img src="token.php"> wyswietlac ja w obrazku - ale u tych 3% ludzi sesja jakby wcale nie dzialala jak do pliku odwoluje sie przez <img..>

Ten post edytował barts 17.01.2008, 13:16:22
Go to the top of the page
+Quote Post
loff
post 17.01.2008, 16:57:15
Post #4





Grupa: Zarejestrowani
Postów: 39
Pomógł: 15
Dołączył: 21.03.2007
Skąd: Poznań

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


hmm problem na pewno nie leży po stronie kodu. Jedyne logiczne rozwiązanie jakie przychodzi mi do głowy jest najprostsze - u tych 3 procent userow nie wykrywa juz istniejącej sesji czyli identyfikator sesji nie jest przekazywany ani przez cookiesa ani przez link.
Go to the top of the page
+Quote Post
SirZooro
post 17.01.2008, 17:33:25
Post #5





Grupa: Zarejestrowani
Postów: 243
Pomógł: 32
Dołączył: 14.06.2007

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


Sprawdź czy ludzie mają włączone cookies w przeglądarce. Spróbuj też wymusić odczytanie wszystkich plików z serwera (Ctrl-F5). Możesz też dodać to skryptu generującego Captcha nagłówki które zapobiegną cache'owaniu przez serwery proxy, czyli coś takiego:
  1. <?php
  2. header( "Expires: Mon, 20 Dec 1998 01:00:00 GMT" );
  3. header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" );
  4. header( "Cache-Control: no-cache, must-revalidate" );
  5. header( "Pragma: no-cache" );
  6. ?>


--------------------
Go to the top of the page
+Quote Post
nevt
post 17.01.2008, 19:06:39
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


a czy w tym drugim pliku (strona.php), też masz session_start() questionmark.gif


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
barts
post 17.01.2008, 19:50:21
Post #7





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 8.07.2005

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


SirZooro - ci ludzie maja wlaczona obsluge cookie - normalnie loguja sie na stronie i sesja im dziala. Samo wpisanie strona.pl/token.php tez zapisuje im zmienna do sesji, tylko jak dam w kodzie <img src="token.php"> to tym 3% nie zapisuje zmiennej do sesji.

nevt - oczywiscie w kazdym mam session_start() - jakbym nie mial to tym 97% tez by nie dzialala captcha poprawnie.

loff - jutro jak jedna z osob ktorym to nie dziala bedzie online to potestuje przekazywanie PHPSESSID: <img src="token.php?PHPSESSID">. Zobaczymy czy pomoze.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:23