ďťż
Podstrony
|
telcocafeNagle po 2 latach przestał mi dzialac system logowania na stronie www, napisany kiedys przeze mnie, pomimo tego ze podaje dobrego uzytkownika i dobre haslo(sprawdzalem w bazie danych) nie moge sie zalogowac, jaka moze byc przyczyna? zmienilo sie cos w standartach? bardzo prosze o pomocpokaż kod. Używałeś kiedyś register_globals, czyli zamiast $_POST['login'] $login? <?php $url = 'localhost'; $identyfikator = *; $haslo = '*'; $baza_danych="*"; $tabela="*"; if (session_is_registered("wylogowany")) {unset($PHP_AUTH_USER); $wynik=session_unregister("wylogowany");} if (! session_is_registered("prawid_uzyt")) //jeśli uzytkownik nie jest zalogowany oraz jest to pierwsza proba wpisania nazwy uzytkownika { if (!isset($PHP_AUTH_USER)) { header('WWW-Authenticate: Basic realm="Tajne miejsce"'); header('HTTP/1.0 401 Unauthorized'); echo 'Brak dostępu'; echo'<meta http-equiv="refresh" content="1; url=../index.php">' ; exit; } else if (isset($PHP_AUTH_USER)) //uzytkownik podal swój nickname { $bd_lacz=mysql_connect($url, $identyfikator, $haslo); mysql_select_db($baza_danych); $zapytanie="select * from $tabela where user='$PHP_AUTH_USER' and password='$PHP_AUTH_PW'"; //sprawdzenie czy uzytkownik podal poprawne dane $wynik=mysql_query($zapytanie); if(mysql_num_rows($wynik)>0) // jeżeli dane są w bazie zarejestrowanie identyfikatora użytkownika { $prawid_uzyt=$PHP_AUTH_USER; session_register("prawid_uzyt"); } else { header('WWW-Authenticate: Basic realm="Tajne miejsce"'); header('HTTP/1.0 401 Unauthorized'); echo 'Brak dostępu'; echo'<meta http-equiv="refresh" content="1; url=../index.php">' ; exit; } } } if (session_is_registered("prawid_uzyt")) { echo'<meta http-equiv="refresh" content="0; url=baza_danych.php">' ; } ob_end_flush();//koniec buforowania danych ?> Prawdopodobnie problem wynika z wersji PHP na serwerze: Zmienne logowania w formacie $PHP_AUTH_USER/$PHP_AUTH_PW były obsługiwane do wersji 4.x. W PHP 5 (które najprawdopodobniej wprowadzono na Twoim hostingu) takie zmienne nie są akceptowane. Musisz użyć zamiast wszystkich wystąpień $PHP_AUTH_USER -> $_SERVER['PHP_AUTH_USER'] i zamiast $PHP_AUTH_PW -> $_SERVER['PHP_AUTH_PW'] Jeśli to poprawisz to powinno działać, możesz dodatkowo dla pewności mojej tezy sprawdzić też funkcją phpinfo(); parametry serwera i m.in. wersję PHP Prawdopodobnie problem wynika z wersji PHP na serwerze: Zmienne logowania w formacie $PHP_AUTH_USER/$PHP_AUTH_PW były obsługiwane do wersji 4.x. W PHP 5 (które najprawdopodobniej wprowadzono na Twoim hostingu) takie zmienne nie są akceptowane. Musisz użyć zamiast wszystkich wystąpień $PHP_AUTH_USER -> $_SERVER['PHP_AUTH_USER'] i zamiast $PHP_AUTH_PW -> $_SERVER['PHP_AUTH_PW'] Jeśli to poprawisz to powinno działać, możesz dodatkowo dla pewności mojej tezy sprawdzić też funkcją phpinfo(); parametry serwera i m.in. wersję PHP Niestety nie pomoglo, a wersja php na serwerze to 5.2.5 Hmm... Teraz się zastanawiam, co tutaj robi ten zapis:$zapytanie="select * from $tabela where user='$PHP_AUTH_USER' and password='$PHP_AUTH_PW'"; //sprawdzenie czy uzytkownik podal poprawne daneSprawdź, czy w tabeli są użytkownicy, poniważ ten zapis jest furtką dla włamywacza, który być może tę furtkę otworzył... Użytkownik andrzej_aa edytował ten post 19 wrzesień 2008, 18:24 Hmm... Teraz się zastanawiam, co tutaj robi ten zapis:$zapytanie="select * from $tabela where user='$PHP_AUTH_USER' and password='$PHP_AUTH_PW'"; //sprawdzenie czy uzytkownik podal poprawne daneSprawdź, czy w tabeli są użytkownicy, poniważ ten zapis jest furtką dla włamywacza, który być może tę furtkę otworzył... no przeciez sprawdzam, czy to co podal uzytkownik zgadza sie z tym co jest w bazie danych. Mi sie zdaje ze jeszcze cos tu nusi byc niekompatybilne z php5 tylko nie wiem co to moze byc Użytkownik Maniek2410 edytował ten post 19 wrzesień 2008, 18:29 Jeśli coś jest nie tak, error_reporting(E_ALL) powinien wywalić błędy. Sprawdziłeś, czy w bazie są użytkownicy, na konta których się logujesz? // Edytowano Nie wiem, co robisz nie tak, ale u mnie kod działa.<?php $url = 'localhost'; $identyfikator = '*'; $haslo = '*'; $baza_danych="*"; $tabela="*"; if (session_is_registered("wylogowany")) {unset($_SERVER['PHP_AUTH_USER']); $wynik=session_unregister("wylogowany");} if (! session_is_registered("prawid_uzyt")) //jeśli uzytkownik nie jest zalogowany oraz jest to pierwsza proba wpisania nazwy uzytkownika { if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="Tajne miejsce"'); header('HTTP/1.0 401 Unauthorized'); echo 'Brak dostępu'; echo'<meta http-equiv="refresh" content="1; url=../index.php">' ; exit; } else if (isset($_SERVER['PHP_AUTH_USER'])) //uzytkownik podal swój nickname { $bd_lacz=mysql_connect($url, $identyfikator, $haslo); mysql_select_db($baza_danych); $zapytanie='select * from '.$tabela.' where user="'.addslashes($_SERVER['PHP_AUTH_USER']).'" and password="'.addslashes($_SERVER['PHP_AUTH_PW']).'"'; //sprawdzenie czy uzytkownik podal poprawne dane $wynik=mysql_query($zapytanie); if(mysql_num_rows($wynik)>0) // jeżeli dane są w bazie zarejestrowanie identyfikatora użytkownika { $prawid_uzyt=$_SERVER['PHP_AUTH_USER']; session_register("prawid_uzyt"); } else { header('WWW-Authenticate: Basic realm="Tajne miejsce"'); header('HTTP/1.0 401 Unauthorized'); echo 'Brak dostępu'; echo'<meta http-equiv="refresh" content="1; url=../index.php">' ; exit; } } } if (session_is_registered("prawid_uzyt")) { echo'<meta http-equiv="refresh" content="0; url=baza_danych.php">' ; } ob_end_flush();//koniec buforowania danych ?>Nie sprawdziłem jedynie tego na bazie, ponieważ już nie chce mi się tworzyć tabeli. Jednak to nie jest problem (skoro tak twierdzisz). Aha, uodporniłem też skrypt od SQL Injection. Użytkownik andrzej_aa edytował ten post 19 wrzesień 2008, 20:33 mi ten kod tez nie wyrzuca zadnyc bledow, ale system logowania zachowuje sie tak jak bym wpisywal zle dane, a dane sa na pewno dobre:/ Czy Ty mnie czytasz? Pytam po raz trzeci: czy w bazie danych, w Twojej tabeli są użytkownicy, na konta których chcesz się zalogować? I dodaj session_start() oraz ob_start(), bo widzę, że nie masz, a chcesz używać. // Edytowano @niżej: To ja już nie wiem. Ten kod działa, więc nie w tym miejscu jest błąd. Użytkownik andrzej_aa edytował ten post 20 wrzesień 2008, 10:50 Czy Ty mnie czytasz? Pytam po raz trzeci: czy w bazie danych, w Twojej tabeli są użytkownicy, na konta których chcesz się zalogować? I dodaj session_start() oraz ob_start(), bo widzę, że nie masz, a chcesz używać. w bazie danych sa uzytkownicy na ktorych sie loguje, 'session_start() oraz ob_start(), ' jest w kodzie, na samej gorze strony, potem jest troche htmla a potem ten fragment ktory Wam przekopiowalem |
|||
Sitedesign by AltusUmbrae. |