Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] logowanie PDO
Forum PHP.pl > Forum > Przedszkole
!*!
Jak powinno wyglądać logowanie oparte o PDO?
  1. try
  2. {
  3. $pdo = new PDO(''.DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME.'', ''.DB_LOGIN.'', ''.DB_PASS.'', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  4. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  5. $stmt = $pdo -> prepare('SELECT login, pass FROM users WHERE login=:login AND pass=:password LIMIT 1');
  6. $stmt -> bindValue(':login', $_POST['login'], PDO::PARAM_STR);
  7. $stmt -> bindValue(':password', $_POST['password'], PDO::PARAM_STR);
  8. $stmt -> execute();
  9.  
  10. $user=$stmt-> fetch();
  11. $stmt -> closeCursor();
  12. //print_r($user);
  13. if(!$user['login'] && !$user['pass'] || $user['login'] != $_POST['login'] && $user['pass'] != $_POST['password']){echo 'nie działa';}else{echo 'login i hasło się zgadzają';}
  14.  
  15. }
  16. catch(PDOException $e)
  17. {
  18. echo 'Błąd połączenia: ' . $e->getMessage();
  19. }


Napisałem coś takiego, jednak niejestem pewien co do sprawdzenia czy login i hasło istnieją, a jeśli tak to czy są takie same jak te podane przez POST... i mam problem z wielkością liter, obecnie jeśli w bazie mam login "admin" i hasło "test", to po wysłaniu danych "Admin", "Test" zostane zalogowany...
Crozin
A co ma PDO do algorytmu logowania? Jak nie wiesz jak zrobić logowanie to sobie poszukaj php [nazwa bazy] logowanie użytkowników.

Cytat
i mam problem z wielkością liter, obecnie jeśli w bazie mam login "admin" i hasło "test", to po wysłaniu danych "Admin", "Test" zostane zalogowany...
Pomijając fakt, że jest to raczej pożądane zachowanie... zmień parametr COLLATION w bazie danych z *_ci (case-insensitive) na *_cs (case-sensitive).
ViX
Cytat(!*! @ 31.01.2011, 01:23:42 ) *
  1. if(!$user['login'] && !$user['pass'] || $user['login'] != $_POST['login'] && $user['pass'] != $_POST['password']){echo 'nie działa';}else{echo 'login i hasło się zgadzają';}
  2.  


Po co tak kombinować? Nie prościej wysłać zapytanie do bazy typu
  1. SELECT * FROM 'users' WHERE login='$login' AND password='$password'


a następnie tylko odczytać wartości

  1. if($query['id']>0)
  2. {
  3. echo('Wszystko ok');
  4. }
  5. else
  6. {
  7. echo('Nie ma usera lub błędne hasło');
  8. }


Cytat(Crozin @ 31.01.2011, 01:29:43 ) *
Pomijając fakt, że jest to raczej pożądane zachowanie...

Rozumiem kwestię loginu, ale osobiście nie cieszyłby mnie fakt, gdyby można było zalogować się na moje konto z hasłem "super tajne hasło", gdy specjalnie utrudniłem je do "SupeR TajNe HASŁO"...
kiler129
...dodajmy też, że haseł NIE TRZYMA SIĘ PLAINTEXTEM! Conajmniej md5 a najlepiej crypt z solą.
Fifi209
kiler a nie przypadkiem funkcja hashująca + sól ?;]
darko
Cytat(Crozin @ 31.01.2011, 01:29:43 ) *
(...) zmień parametr COLLATION w bazie danych z *_ci (case-insensitive) na *_cs (case-sensitive).

Pomógł (klik) Dzięki Crozin, nie wiedziałem tego. W temacie, ja robię tak, że wyciągam z bazy tylko id użytkownika i jeśli ta wartość jest liczbą to znaczy, że znaleziono użytkownika w bazie o podanym loginie i haszu hasła. Hasła oczywiście są przechowywane w postaci haszy z solą tworzoną na podstawie id użytkownika, daty rejestracji w systemie i jeszcze kilku stałych wartości.
ViX
Cytat(fifi209 @ 31.01.2011, 08:07:23 ) *
kiler a nie przypadkiem funkcja hashująca + sól ?;]


Osobiście stosuję podwójne hashowanie z soleniem, na jednym z kursów polecali takie rozwiązanie więc używam go po dziś dzień.

  1. $hash = md5('i_like_salt'.sha256($password.$register_time).'very_long_salt');
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.