Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Skrypt logowania
Forum PHP.pl > Forum > Przedszkole
Kaarpiik
Witam prezentuje mój skrypt logowania:

  1. <?php
  2. include('funkcje/funkcje_strona.php');
  3. include('funkcje/funkcje_baza.php');
  4. ?>
  5. <head>
  6. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  7. <link rel="stylesheet" href="/style.css " type="text/css">
  8. </head>
  9.  
  10.  
  11. <?php
  12. if($_GET['login'] == 'check'){
  13.  
  14. $user_login = $_POST["user_login"];
  15. $user_password = $_POST["user_password"];
  16.  
  17. if($user_login == "" || $user_password == "") {
  18. func_wiadomosc('Błąd!', 'Nie wpisałeś loginu lub hasła!', '4', 'index.php');
  19. exit();
  20. }
  21.  
  22. else {
  23. db_connect();
  24. $query = "SELECT * FROM users WHERE user_login = '$user_login' AND user_password = '$user_password'";
  25. $result = mysql_query($query);
  26. $row = mysql_fetch_array($result);
  27. if($row['user_login'] !== $user_login && $row['user_password'] !== $user_password) {
  28. func_wiadomosc('Błąd!', 'Podane dane się nie zgadzają.', '4', 'index.php');
  29. exit();
  30. }
  31. else {
  32. $_SESSION['sesja'] = 'istnieje';
  33. $_SESSION['user_id'] = $row['user_id'];
  34. $_SESSION['user_login'] = $row['user_login'];
  35. $_SESSION['user_email'] = $row['user_email'];
  36. $_SESSION['user_name'] = $row['user_name'];
  37. $_SESSION['user_city'] = $row['user_city'];
  38. $_SESSION['user_gg'] = $row['user_gg'];
  39. $_SESSION['user_lastlogin'] = $row['user_lastlogin'];
  40. $_SESSION['user_joindate'] = $row['user_joindate'];
  41. $_SESSION['user_position'] = $row['user_position'];
  42.  
  43. func_wiadomosc('Witamy '.$_SESSION['user_login'].'!', 'Poprawnie zalogowano.', '4', 'index.php');
  44. }
  45. }
  46. }
  47.  
  48. if($_GET['login'] == 'wyloguj') {
  49. if($_SESSION['sesja'] != 'istnieje'){
  50. func_wiadomosc('Żegnaj '.$_SESSION['user_login'].'!', 'Poprawnie wylogowano!', '4', 'index.php');
  51. }
  52. }
  53. ?>


Jest jedno ale. Skrypt ten działa z opóźnieniem tzn gdy próbuje się logować skrypt wykonuje wszystko poprawnie. Wyskakuje mi okienko poprawnie zalogowano i przenosi mnie po 4 sekundach do index.php, jednak ukazuje mi się nadal formularz logowania, gdy odświeże stronę wszystko jest ok zalogowało. Tak samo jest przy wylogowywaniu: klikam wyloguj, wyskakuje okienko wylogowało ale tak naprawdę nie wylogowało i z powrotem przenosi mnie do wylogowywania. Gdy spróbuje następnym razem wszystko jest ok. Tak jakby usuwało zmienne sesji po czasie i przy logowaniu tak jakby tworzyło zmienne sesji z małym opóźnieniem. Czym może to być spowodowane?
Ramzaa
zacznijmy może od tego, że nie warto tworzyć tylu sesji, bo można stworzyć sesję "user_login", po czym funkcje do wyciągania danych użytkownika z bazy mysql. Jedno proste zapytanko i masz wszystkie informacje o danym użytkowniku. A tworzysz do najzwyczajniej w świecie: mysql_fetch_assoc(mysql_query("SELECT * FROM `uzytkownicy` WHERE `login` = '".$_SESSION['user_login']."' i zobacz jaki masz porządek od razu w kodzie. Następną rzeczą jest warunek sprawdzający sesję użytkownika czy jest zalogowany, czy nie. Nie rozumiem po co używasz if($_SESSION['sesja'] != 'istnieje'){, skoro możesz wcześniej zarejestrować sesję "zalogowany=true" i później sprawdzać warunek tak: if ($_SESSION['zalogowany'] {. Nie brzmi lepiej i przejrzyściej? Poza tym radzę poczytać o atakach sql_injection i xss, bo Twój skrypt jest bardzo na to podatny.

i proponuję poczytać jeszcze o funkcji isset, która prawdopodobnie rozwiąże Twój problem.

pozdrawiam smile.gif
Kaarpiik
Dzięki za przydatne podpowiedzi. Może i racja z tymi zmiennymi, usunę niepotrzebne ale parę się przyda do szybkiego identyfikowania np user_lastlogin i user_position

Są jeszcze jakieś pomysły dlaczego ten konkretny skrypt nie działa? Wiem że może nie jest bezpieczny ale logować poprawnie powinien smile.gif
Asmox
Kurde też miałem kiedyś taki numer, ale pamiętam to jak przez mgłę. Póki co prowizorycznie daj funkcję na przeładowanie strony, aż nie pojawi się jakiś stary wyjadacz smile.gif Który wszystko wytłumaczy
Kaarpiik
Sam do tego doszedłem czytając trochę o sesjach. Przy wylogowywaniu sprawdzam czy zmienna sesji 'sesja' ma wartość istnieje. Oczywiście że ma bo session_destroy(); nie usuwa zmiennych sesji. Trzeba użyć komendy unset.

@edit:

  1. <?php
  2. include('funkcje/funkcje_strona.php');
  3. include('funkcje/funkcje_baza.php');
  4. ?>
  5. <head>
  6. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  7. <link rel="stylesheet" href="/style.css " type="text/css">
  8. </head>
  9.  
  10.  
  11. <?php
  12. if($_GET['login'] == 'check'){
  13.  
  14. $user_login = $_POST["user_login"];
  15. $user_password = $_POST["user_password"];
  16.  
  17. if($user_login == "" || $user_password == "") {
  18. func_wiadomosc('Błąd!', 'Nie wpisałeś loginu lub hasła!', '4', 'index.php');
  19. exit();
  20. }
  21.  
  22. else {
  23. db_connect();
  24. $query = "SELECT * FROM users WHERE user_login = '$user_login' AND user_password = '$user_password'";
  25. $result = mysql_query($query);
  26. $row = mysql_fetch_array($result);
  27. if($row['user_login'] !== $user_login && $row['user_password'] !== $user_password) {
  28. func_wiadomosc('Błąd!', 'Podane dane się nie zgadzają.', '3', 'index.php');
  29. exit();
  30. }
  31. else {
  32. $_SESSION['zalogowany'] = 'true';
  33. $_SESSION['user_id'] = $row['user_id'];
  34. $_SESSION['user_login'] = $row['user_login'];
  35. $_SESSION['user_position'] = $row['user_position'];
  36.  
  37. func_wiadomosc('Witamy '.$_SESSION['user_login'].'!', 'Poprawnie zalogowano.', '4', 'index.php');
  38. exit();
  39. }
  40. }
  41. }
  42.  
  43. if($_GET['login'] == 'wyloguj') {
  44. unset($_SESSION['zalogowany']);
  45. unset($_SESSION['suser_id']);
  46. unset($_SESSION['suser_login']);
  47. unset($_SESSION['suser_position']);
  48. if(!$_SESSION['zalogowany']){
  49. func_wiadomosc('Żegnaj '.$_SESSION['user_login'].'!', 'Poprawnie wylogowano!', '4', 'index.php');
  50. exit();
  51. }
  52. }
  53. ?>


Skrypt wygląda następująco. Problem z wylogowywaniem rozwiązany, a sprawa logowania wciąż pozostaje.

bump
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.