Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Skrypt logowania
Kaarpiik
post
Post #1





Grupa: Zarejestrowani
Postów: 59
Pomógł: 1
Dołączył: 20.01.2008
Skąd: Bełchatów

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Ramzaa
post
Post #2





Grupa: Zarejestrowani
Postów: 207
Pomógł: 17
Dołączył: 4.08.2009

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował Ramzaa 24.08.2010, 20:22:23
Go to the top of the page
+Quote Post
Kaarpiik
post
Post #3





Grupa: Zarejestrowani
Postów: 59
Pomógł: 1
Dołączył: 20.01.2008
Skąd: Bełchatów

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Asmox
post
Post #4





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif) Który wszystko wytłumaczy
Go to the top of the page
+Quote Post
Kaarpiik
post
Post #5





Grupa: Zarejestrowani
Postów: 59
Pomógł: 1
Dołączył: 20.01.2008
Skąd: Bełchatów

Ostrzeżenie: (0%)
-----


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

Ten post edytował Kaarpiik 26.08.2010, 09:00:38
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.09.2025 - 11:00