ďťż
Podstrony
|
telcocafeCześćNa stronie kożystam z przerobionego przez siebie skryptu z PC Formata. Problem pojawił się przy cookies. Strona do logowania miała taki skrypt: <? $inc = './inc/'; error_reporting(ALL); require_once($inc.'mysql.php'); require_once($inc.'error.php'); require_once($inc.'news.php'); require_once($inc.'user.php'); require_once('system/Strona.php'); class Strona1 extends Strona { var $baza, $info, $user; function tresc(){ baza::polacz(); $act = $_GET['act']; if(!$act){ user::loginForm(); } elseif($act == 'login'){ $log = $_POST['login']; $pass = $_POST['pass']; user::login($log, $pass); } elseif($act == 'logout'){ user::logout(); } } } $strona=new Strona1("Logowanie"); $strona->pokaz(); ?> Funkcje wywoływane to: function loginForm(){ echo '<form action="login.php?act=login" method="POST">'; echo '<table cellspacing="0" cellpadding="0" width="100%">'; echo '<tr><td width="100%" class="tytul">'; echo 'Logowanie'; echo '</td></tr><tr><td width="100%" class="tresc" align="justify">'; echo 'Login: <input type="text" name="login" class="login"><br />'; echo 'Has�o: <input type="password" name="pass" class="login" value=""></br>'; echo '<input type="hidden" name="act" value="login">'; echo ' <input type="submit" value="Loguj!" class="login">'; echo '</td></tr></table>'; echo '</form>'; } function login($login, $pass){ $zapytanie = 'SELECT * FROM user WHERE login="'.$login.'" AND pass="'.$pass.'";'; $query = mysql_query($zapytanie); $ilosc = mysql_num_rows($query); $wiersz = mysql_fetch_array($query); $id = $wiersz['id']; if($ilosc != '1'){ echo '<table cellspacing="0" cellpadding="0" width="100%">'; echo '<tr><td width="100%" class="tytul">'; echo ' Logowanie'; echo '</td></tr><tr><td width="100%" class="tresc" align="justify">'; $a = 'B��d'; echo $a; } else{ setcookie("login",$login,time()+30); setcookie('pass',$pass,time()+30); setcookie('id',$id,time()+30); setcookie('log_in','1',time()+30); echo '<table cellspacing="0" cellpadding="0" width="100%">'; echo '<tr><td width="100%" class="tytul">'; echo ' Logowanie'; echo '</td></tr><tr><td width="100%" class="tresc" align="justify">'; echo 'Jeste� zalogowany jako <B>'.$login.'</B><br />'; echo '<a href="login.php?act=logout">Wloguj</a> | '; echo '<a href="member.php">Menu U�ytkownika<a/> |'; echo '<a href="login.php">Powr�t<a/> '; } echo '</td></tr></table>'; } function logout(){ setcookie('login',''); setcookie('pass',''); setcookie('id',''); setcookie('log_in',''); echo '<table cellspacing="0" cellpadding="0" width="100%">'; echo '<tr><td width="100%" class="tytul">'; echo ' Wylogowywanie'; echo '</td></tr><tr><td width="100%" class="tresc" align="justify">'; echo 'Zosta�e� wylogowany <a href="login.php">Zaloguj si� ponownie</a>'; echo '</td></tr></table>'; } I pozostaje plik members.php <? $inc = './inc/'; error_reporting(ALL); require_once($inc.'mysql.php'); require_once($inc.'error.php'); require_once($inc.'news.php'); require_once($inc.'user.php'); require_once('system/Strona.php'); class Strona1 extends Strona { var $baza, $info, $user, $news; function tresc(){ baza::polacz(); $a = $_COOKIE['login']; $b = $_COOKIE['pass']; $c = $_COOKIE['id']; $d = $_COOKIE['log_in']; echo 'login='.$a.', pass='.$b.', id='.$c.'<br />'; if ($d == '1'){ echo ' Użytkownik zalogowany'; } else{ echo ' Użytkownik nie zalogowany'; } echo '<br /> <a href="./login.php">Wróć</a> '; } } $strona=new Strona1("Użytkownicy"); $strona->pokaz(); ?> Problemem jest to, że użytkownik się zaloguje po podaniu poprawnych danych, ale nie zostaną wysłane ciasteczka i plik members nie wczytuje danych. Wygląda mi na to, że nie są wysłane ciastka, ale skrypt do samych ciastek jak testowałem w czystych plikach to działał. Mam problem bo został mi tydzień do skończenia strony. POMOCY!!! Ojojoj, ojojoj, co za brzydki skrypt. Niebezpieczny i chyba nie ma struktury dokumentu HTML. Oczywiście żadne dane nie są wysyłane przed funkcją tworzącą ciastka? Żadnego błędu nie wyświetla? Che-che! 30 sekund? Długo strasznie :-D Użytkownik andrzej_aa edytował ten post 20 styczeń 2008, 16:29 To jest dopiero szablon, więc na bezpieczeństwo nie patrz. Co do czasu to u mnie tak długo się nie wykonuje. Mam włączone wypisywanie błędów , ale wypisuje mi tylko dane podane przeze mnie, tj. login=, itd, ale nie podaje wartości. Wykorzystaj sesje które są o wiele lepsze, szybsze i bezpieczniejsze. Na początku pliku robisz session_start(); session_register('test'); I w skrypcie zmienna test masz dostępną tak $_SESSION["test"]; Wpisujesz do niej strone i na każdej stronie w której znajdzie sie kod który podałem ci na poczatku bedzie dostepna ta dana. Myślałem nad sesjami, ale to rozwiązanie mi nie odpowiada. Ciastka są dla mnie tutaj bardziej optymalne. Optymalne ze względu na? I co takiego nie odpowiada w sesjach? Wydłuż czas ważnosci ciasteczek do 2 h i zobacz czy to coś da. I chyba teraz bedzie działac raportowania błędów. error_reporting(E_ALL); Użytkownik polasek edytował ten post 20 styczeń 2008, 16:52 Co do sesji: chodzi mi o ich wygasanie po określonym czasie. Do logowania są wg mnie lepsze ciastka. odp.:To nic nie daje. nawet po wydłużeniu nic się nie wyświetla edit: W pliku login.php: Undefined index: act in (.......) on line 13 Undefined index: log_in (.......) on line 14 Undefined index: login in (.......) on line 15 login.php po zalogowaniu: Notice: Undefined index: log_in in c:\usr\apache\httpd\html\szkola\login.php on line 14 Notice: Undefined index: login in c:\usr\apache\httpd\html\szkola\login.php on line 15 Warning: Cannot modify header information - headers already sent by (output started at c:\usr\apache\httpd\html\szkola\system\WzorStrony.php:33) in c:\usr\apache\httpd\html\szkola\inc\user.php on line 115 Warning: Cannot modify header information - headers already sent by (output started at c:\usr\apache\httpd\html\szkola\system\WzorStrony.php:33) in c:\usr\apache\httpd\html\szkola\inc\user.php on line 116 Warning: Cannot modify header information - headers already sent by (output started at c:\usr\apache\httpd\html\szkola\system\WzorStrony.php:33) in c:\usr\apache\httpd\html\szkola\inc\user.php on line 117 Warning: Cannot modify header information - headers already sent by (output started at c:\usr\apache\httpd\html\szkola\system\WzorStrony.php:33) in c:\usr\apache\httpd\html\szkola\inc\user.php on line 118 members.php Notice: Undefined index: login in c:\usr\apache\httpd\html\szkola\member.php on line 13 Notice: Undefined index: pass in c:\usr\apache\httpd\html\szkola\member.php on line 14 Notice: Undefined index: id in c:\usr\apache\httpd\html\szkola\member.php on line 15 Notice: Undefined index: log_in in c:\usr\apache\httpd\html\szkola\member.php on line 16 Wszystko odnosi się do ciastek Użytkownik rakiop edytował ten post 20 styczeń 2008, 17:00 Czas wygaśnięcia sesji można zmienić, po drugie twoje ciesteczka mają zerowe bezpieczeństwo. Bo przechowujesz w nich hasło, login, i stan zalogowania co można z łatwością podejrzeć i ewentualnie dostać się na stronę nawet bez znajomości hasła bo nie masz zabezpieczeń przed SQL injection. Sesje są o wiele lepszym rozwiązaniem i bardziej optymalnym i nie wmówisz mi, że do logowania lepsze są ciasteczka do gbyby tak było to jakoś tak wiele osób nie korzystałoby z sesji. Popraw błąd z error_reportingiem który ci podałem powyżej. EDIT // Czyli już widzisz jaki błąd. Przed wywołaniem setcookie nie mogą być wysłane żadne dane do przeglądarki. Musisz wstawić setcookie ZANIM wyślesz cokolwiek do przeglądarki. (przypominam o sesjach) Po 2. Zanim dopiszesz do zmiennej $act zawartość $_GET['act'] to sprawdz czy taki klucz w tablicy istnieje if(isset($_GET['act'])) $act = $_GET['act']; Użytkownik polasek edytował ten post 20 styczeń 2008, 17:05 Znalazłem ciekawe rozwiązanie. Podam je za chwilę jak się sprawdzi. jak na razie to posłuchałem rady polaska co do zmiennej: if(isset($_GET['act'])) $act = $_GET['act'] if(!$act){ $a = user::loginForm(); } i wyrzuca mi taki błąd odnośnie linijki if(isset(...)): Undefined variable: act in (....) on line 11 O co chodzi?? $act=null; if(isset($_GET['act'])) $act = $_GET['act']; Dzięki wszystkim. Podam niżej skrypt jakby ktoś potrzebował. Przypominam jednak że jest bez zabezpieczeń. Plik login.php <? $inc = './inc/'; error_reporting(E_ALL); require_once($inc.'mysql.php'); require_once($inc.'error.php'); require_once($inc.'user.php'); require_once('system/Strona.php'); baza::polacz(); $act = null; $cookie_login = null; $cookie_log_in = null; if(isset($_GET['act']))$act=$_GET['act']; if(isset($_COOKIE['login']))$cookie_login=$_COOKIE['login' ]; if(isset($_COOKIE['log_in']))$cookie_log_in=$_COOKIE['log_in' ]; if($act == ''){ if($cookie_log_in == ''){ $a = user::loginForm(); } elseif($cookie_log_in == '1'){ header('Location: member.php'); } } elseif($act == 'login'){ if(isset($_GET['login'])) $login = $_GET['login']; if(isset($_GET['pass'])) $pass = $_GET['pass']; user::login($login, $pass); } elseif($act == 'login_ok'){ if($cookie_log_in == '1'){ $b = 'zalogowałeś się '.$cookie_login; } else{ $b = 'zaloguj się'; } } elseif($act == 'logout'){ user::logout(); } elseif($act == 'logout_ok'){ $b = 'Wylogowałeś się'; } class Strona1 extends Strona { var $baza, $info, $user; function tresc(){ global $a; global $b; if($a != ''){ echo $a; } else{ echo' <table cellspacing="0" cellpadding="0" width="100%"> <tr><td width="100%" class="tytul"> Logowanie </td></tr><tr><td width="100%" class="tresc" align="justify">'; echo $b; echo '</td></tr></table>'; } } } $strona=new Strona1("Logowanie"); $strona->pokaz(); ?> skrypty -> user.php <? class user{ function loginForm(){ $a = '<form action="login.php?act=login" method="POST"> <table cellspacing="0" cellpadding="0" width="100%"> <tr><td width="100%" class="tytul"> Logowanie </td></tr><tr><td width="100%" class="tresc" align="justify"> Login: <input type="text" name="login" class="login"><br /> Hasło: <input type="password" name="pass" class="login" value=""></br> <input type="hidden" name="act" value="login"> <input type="submit" value="Loguj!" class="login"> </td></tr></table> </form>'; return $a; } function login($login, $pass){ $zapytanie = 'SELECT * FROM user WHERE login="'.$login.'" AND pass="'.$pass.'";'; $query = mysql_query($zapytanie); $ilosc = mysql_num_rows($query); $wiersz = mysql_fetch_array($query); $id = $wiersz['id']; if($ilosc != '1'){ $a = 'Błąd'; return $a; } else{ setcookie("login",$login,time()+30); setcookie('pass',$pass,time()+30); setcookie('id',$id,time()+30); setcookie('log_in','1',time()+30); header('Location: ./member.php'); } } function logout(){ setcookie('login',''); setcookie('pass',''); setcookie('id',''); setcookie('log_in','0'); header('Location: ./login.php?act=logout_ok'); } } ?> plik dla użytkowników member.php <? $inc = './inc/'; error_reporting(E_ALL); require_once($inc.'mysql.php'); require_once($inc.'error.php'); require_once($inc.'news.php'); require_once($inc.'user.php'); require_once('system/Strona.php'); $a = null; $b = null; $c = null; $d = null; $e = null; if(isset($_COOKIE['login'])) $a = $_COOKIE['login']; if(isset($_COOKIE['login'])) $b = $_COOKIE['pass']; if(isset($_COOKIE['login'])) $c = $_COOKIE['id']; if(isset($_COOKIE['login'])) $d = $_COOKIE['log_in']; if(isset($e)) $e=''; if($d == ''){ $a = ''; $b = ''; $c = ''; $e = ''; } elseif($d == '1'){ $e = 'Witaj.'; } class Strona1 extends Strona { var $baza, $info, $user, $news; function tresc(){ baza::polacz(); global $a, $b, $c, $d, $e; if($a != ''){ echo 'login='.$a.', pass='.$b.', id='.$c.'<br />'.$e.'<br />'; } echo '<a href="./login.php">Wróć</a> '; } } $strona=new Strona1("Użytkownicy"); $strona->pokaz(); ?> Przypomnienie: Moja strona działa na zasadzie skryptu z CHIPA, ale nie pamiętam, który numer. Cały skrypt jest u nich na stronie. To dzięki wszytkim i Pozdro. Temat do zamknięcia :P Cześć Na stronie kożystam z przerobionego przez siebie skryptu z PC Formata. Przypomnienie: Moja strona działa na zasadzie skryptu z CHIPA, ale nie pamiętam, który numer. Cały skrypt jest u nich na stronie. To dzięki wszytkim i Pozdro. Ekhem... A ty nadal z tymi ciasteczkami... Może powiesz jakie dasz zabezpieczenia na dane wysyłane w ciasteczkach? md5 na login, nie wyśle hasła i id. Poza tym więcej jak na razie nie zamierzam wysyłać w ciasteczkach, może później. Zastosuje też sprawdzanie autentyczności ciasteczka. Wyśle wygenerowany identyfikator przy logowaniu zapisywany też do bazy i przy każdym nowym logowaniu wygeneruje nowy. Będę go sprawdzał przy sprawdzaniu cookie. Na razie mam tyle pomysłów. Aaaa... sorki za błąd z gazetą w opisie problemu :D Edit: Można już zamknąć temat. Użytkownik rakiop edytował ten post 22 styczeń 2008, 20:27 |
|||
Sitedesign by AltusUmbrae. |