Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sesja nie dziala u 3% uzytkownikow strony (Captcha)
Forum PHP.pl > Forum > PHP
barts
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.
nevt
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...
barts
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..>
loff
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.
SirZooro
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. ?>
nevt
a czy w tym drugim pliku (strona.php), też masz session_start() questionmark.gif
barts
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.
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.