Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php - podstawy] Sesje i problemy z nimi związane
Forum PHP.pl > Forum > PHP
Gnomik
Witajcie, mam pewien problem z sejsami... Otóż wiedziony potrzebą, próbuję bezskutecznie napisać system logowania. Działa w połowie... czyli mówiąc krótko - nie działa. Ale bliżej...

Ten oto prosty kod sprawdzający poprawność funkcji zachowuje się troszkę... dziwnie.

index.php:
  1. <?php
  2.  
  3. include("funct_session.php");
  4.  
  5. if(check_pass("jakis_login", "jakies_haslo")) {
  6. sess_make("jakis_login", "jakies_haslo");
  7. echo "Sesja utworzona.<br>";
  8. }
  9.  
  10. if(sess_state()) echo "Sesja aktywna.<br>";
  11. elseif(!sess_state()) echo "Brak sesji.<br>";
  12.  
  13.  
  14. sess_destroy();
  15. echo "Sesja usunięta.<br>";
  16.  
  17. ?>


i plik z funkcjami, funct_session.php:
  1. <?php
  2.  
  3. function check_pass($login, $pass) {
  4. include("database.cfg.php");
  5. $check_pass_grip = mysql_connect($DB_HOST, $DB_USER, $DB_PASS);
  6. $user = mysql_fetch_array(mysql_query("SELECT username FROM samgam_fantastyka.forum_users WHERE username='".$login."' AND user_password='".md5($pass)."'",$check_pass_grip)) or die(mysql_error());
  7. mysql_close($check_pass_grip);
  8. if($user['username']=="") return false;
  9. else return $user['username'];
  10. }
  11.  
  12. function sess_state() {
  13. include("config.cfg.php");
  14. if(isset($_SESSION['sess_id'])) {
  15. $session_state = mysql_connect($DB_HOST, $DB_USER, $DB_PASS);
  16. $user = mysql_fetch_array(mysql_query("SELECT sess_id, username FROM samgam_bestiariusz.session_users WHERE userna
    me='"
    .$_SESSION['username']."'", $session_state));
  17. mysql_close($session_state);
  18. if($user['username']==$_SESSION['username']) return true;
  19. else return false;
  20. }
  21. elseif(!isset($_SESSION['sess_id'])) return false;
  22. }
  23.  
  24. function sess_make($user, $pass) {
  25. include("config.cfg.php");
  26. $time = mktime();
  27. $sess_id = md5($REMOTE_ADDR.$user.$pass.$time);
  28. session_register("sess_id");
  29. session_register("username");
  30. $_SESSION['sess_id'] = $sess_id;
  31. $_SESSION['username'] = $user;
  32. $session_make = mysql_connect($DB_HOST, $DB_USER, $DB_PASS);
  33. if(mysql_num_rows(mysql_query("SELECT * FROM samgam_bestiariusz.session_users WHERE username='".$user."'", $session_make))!=0) mysql_query("DELETE FROM samgam_bestiariusz.session_users WHERE username='".$user."'",$session_make) or die(mysql_error());
  34. mysql_query("INSERT INTO samgam_bestiariusz.session_users VALUES('".$sess_id."', '".$_SESSION['username']."', '".md5($password)."', '".$time."')", $session_make) or die(mysql_error());
  35. mysql_close($session_make);
  36. }
  37.  
  38. function sess_destroy() {
  39. include("config.cfg.php");
  40. $session_destroy = mysql_connect($DB_HOST, $DB_USER, $DB_PASS);
  41. if(mysql_num_rows(mysql_query("SELECT * FROM samgam_bestiariusz.session_users WHERE username='".$_SESSION['username']."'",$session_destroy))!=0) mysql_query("DELETE FROM samgam_bestiariusz.session_users WHERE username='".$_SESSION['username']."'",$session_destroy) or die(mysql_error());
  42. mysql_close($session_destroy);
  43. }
  44.  
  45. ?>


Sprawa wyglada tak, że skrypt działa w przypadku kiedy hasło jest Login i Hasło są rzeczywiście poprawne. Zaskakujące jest to, że gdy wpisze błędne hasło lub login, nie dzieje się... nic. Output jest czysty, biały, pusty. Nie wiem w czym leży problem. Próbowałem kilku rzeczy, od sprawdzenia poprawności zapytań MySQL po bardziej bezpośrednie moetody sprawdzania, ale wszystko zdaje się być Ok.

Za pomoc z góry dziękuję.

Pozdrawiam,
Gnomik
kossa
Zgadza się, taka szybka analiza kodu i wynik jest taki że jeśli jest zły login i hasło to będzie pusto a jak byś chciał osiągnąć? w tym kodzie to dużo nie jest zawartych możliwości.


Łukasz
NetJaro
Włącz raportowanie błędów i jeżeli się jakieś pojawią - wklej.
Gnomik
Mimo wszystko poradziłem sobie z tematem.

Dodałem do lini:
Kod
$user = mysql_fetch_array(mysql_query("SELECT username FROM samgam_fantastyka.forum_users WHERE username='".$login."' AND user_password='".md5($pass)."'",$check_pass_grip));

warunek sprawdzający czy taki rekord wogóle istnieje i wszystko gra jak należy.

Jak zwykle:
Problem Exists Between Keyboard And Chair.

Pozdrawiam,
Gnomik
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.