![]() |
![]() |
![]() ![]()
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:
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. |
|
|
![]() |
![]()
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... - |
|
|
![]()
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 |
|
|
![]()
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.
|
|
|
![]()
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:
-------------------- |
|
|
![]()
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()
![]() -------------------- - Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... - |
|
|
![]()
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. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 00:23 |