![]() |
![]() |
-Vinnie- |
![]()
Post
#1
|
Goście ![]() |
Mam takie pytanie - może ktoś obeznany z zasadami działania php zna odpowiedź.
Napisałem sobie skrypt do logowania - jeżeli login i hasło było dobre wrzucał co trzeba do sesji, przeładowywał jeszcze raz ekran i wszystko było gut. Po jakimś czasie nastąpiła konieczność zmiany serwera - na szybszy, lepszy i wogóle. I tu nastąpił problem - logowanie czasem działało, czasem nie. Totalny random - czasem 5 razy pod rząd nie łapał, a łapał za 6-tym. Czasem logował bez problemu kilka razy po sobie - żadnej reguły. Zacząłem wypisywać komunikaty do debugowania - okazało się, że po podaniu hasła zapisywał co trzeba do sesji, ale jej zawartość znikała po przeładowaniu ekranu (to znaczy czasem znikała, czasem nie). Rozwiązanie wyszło metodą prób i błędów - trzeba było o pół sekundy opóźnić proces przeładowania ekranu - zawartość sesji na drugim ekranie istniała i nie było problemu. I pytanie do kogoś kto zna wnętrze php-a - co się działo w procesie interpretacji kodu, że jeżeli za szybko przeładowywałem ekran gubiłem zawartość dopiero co zapisanej sesji? |
|
|
![]() |
-Vinnie- |
![]()
Post
#2
|
Goście ![]() |
Poprzednio - www.boo.pl
za phpinfo() Server API Apache 2.0 Handler php Version 4.3.10 Linux izyda 2.4.26 #5 SMP Teraz - www.strefa.pl phpinfo() jest zablokowane, a na stronie dogrzebałem się tylko do notki: Przydatne informacje dotyczące skryptów php i CGI Na kontach STREFA.PL zainstalowany został skrypt php w wesji 4.2.2. Serwer WWW działa w środowisku chroot, zaś pliki użytkowników tworzone są z atrybutami '700'. Zastosowane rozwiązanie pozwala na swobodny odczyt jak i zapis plików na serwerze. Ze względów bezpieczeństwa zablokowane zostały niektóre funkcje systemowe, jak choćby POSIX_. Brak tej funkcji nie wpływa jednak na funkcjonalność samego parsera kodu php. ----------------------------------------------------------- Kod nie jest jakiś wydumany: if($act=="Login") { $res= *** wynik Selecta na bazie danych *** $wart = mysql_fetch_row($res); if ($wart=="") $errorR="1"; else { $HTTP_SESSION_VARS['zalogowany']=$wart[0]; $HTTP_SESSION_VARS['adresikony']=$wart[1]; .... i jescze pare takich linijek ... } } *** Rozne inne funkcje, ktore sie nie wywoluja, bo sa na inne okazje *** if($errorR=="") { ?> <script type='css/javascript'> location.replace("index.php"); </script> <? } else { .... } ------------------------------------------------------------------------- Generalnie chodzilo o to,aby wrzucil wszystko do sesji i jezeli nie ma bledu przeniosl sie do indexa. tymczasem o ile tuz przed location.replace zawartosc sesji byla na miejscu, o tyle w index.php bylo juz czysto (czasem, bo czasem bylo wszystko ok. logowalem sie wielokrotnie w krotkim okresie czasu i nie wykrylem reguly). Pierwsze co zrobilem w trakcie debugowania to dodalem alert() przed location.replace i nagle wszystko zaczelo chodzic bezblednie. Gdy go usunalem skrypt znowu raz dzialal, raz nie. Potem w JS opoznilem przeladowanie używając setTimeout o pół sekundy i wszystkie problemy z czyszczeniem sesji zniknely. W sumie chodzi, ale zapytałem z ciekawości czy może ktoś się z czymś takim spotkał. Na poprzednim serwerze - www.boo.pl - zjawisko nie występowalo. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 16:18 |