Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [class] Klasa uwierzytelniania
Forum PHP.pl > Inne > Oceny
Piotrwusek
  1. <?php
  2. class Auth {
  3.  
  4.    public $username;
  5.    public $password;
  6.  
  7.    public static function issetUser($username)
  8.    {
  9.        return Mysql::num_rows(Mysql::select("SELECT * FROM ".PREFIX."users WHERE username='".$username."'"));
  10.    }
  11.    public static function issetSessionUser($username)
  12.    {
  13.        return Mysql::num_rows(Mysql::select("SELECT * FROM ".PREFIX."sessions WHERE user_id='".Mysql::resultAdapter("users", 'username', $username, 'id')."'"));
  14.    }
  15.    public static function issetSessionSes($session)
  16.    {
  17.        return Mysql::num_rows(Mysql::select("SELECT * FROM ".PREFIX."sessions WHERE session_id='".$session."'"));
  18.    }
  19.    public static function SessionUpdate()
  20.    {
  21.        Mysql::update("UPDATE ".PREFIX."sessions SET time='".time()."' WHERE session_id='".session_id()."'");
  22.        define("AUTH" , Mysql::resultAdapter("users", 'id', Mysql::resultAdapter("sessions", 'session_id', session_id(), 'user_id'), 'access'));        
  23.    }
  24.    public static function Session()
  25.    {
  26.        if(!Auth::issetSessionSes(session_id()))
  27.        {
  28.            return 1;
  29.        }
  30.        else
  31.        {
  32.            $query = Mysql::select("SELECT * FROM ".PREFIX."sessions WHERE session_id='".session_id()."'");
  33.            while($dane = Mysql::fetass($query))
  34.            {
  35.                if(($dane['time'] + SESSION) < time())
  36.                {
  37.                    Mysql::delete("DELETE FROM ".PREFIX."sessions WHERE id='".$dane['id']."'");
  38.                    return 1;
  39.                    $_SESSION['error'] = PText('session-break',"auth");
  40.                }
  41.                else
  42.                {
  43.                    Auth::SessionUpdate();
  44.                    return 0;
  45.                }
  46.            }
  47.        }
  48.    }
  49.    public static function identification($username, $password)
  50.    {
  51.        return Mysql::num_rows(Mysql::select("SELECT * FROM ".PREFIX."users WHERE username='".$username."' AND password='".md5($password)."'"));
  52.    }
  53.    public static function authorization($username, $password)
  54.    {
  55.        $username = strtolower($username);
  56.        
  57.        if(Auth::issetUser($username))
  58.        {
  59.            if(Auth::identification($username, $password))
  60.            {                            
  61.                if(Auth::issetSessionUser($username))
  62.                {            
  63.                    Mysql::delete("DELETE FROM ".PREFIX."sessions WHERE user_id='".Mysql::resultAdapter("users", 'username', $username, 'id')."'");
  64.                }
  65.                    define("AUTH" , Mysql::resultAdapter("users", 'username', $username, 'access'));
  66.                    Mysql::insert("INSERT INTO ".PREFIX."sessions (`id`,`user_id`,`session_id`,`time`)
  67.                                    VALUES (NULL,'".Mysql::resultAdapter("users", 'username', $username, 'id')."','".session_id()."','".time()."')");                        
  68.            }
  69.            else
  70.            {
  71.                $_SESSION['error'] = PText('bad_pass', 'auth');
  72.            }
  73.        }
  74.        else
  75.        {
  76.            $_SESSION['error'] = PText('no_user', 'auth');
  77.        }
  78.    }
  79.  
  80. }
  81. ?>
phpion
Jesteś w stanie wykorzystać tą klasę przy innych projektach, gdzie jest inna struktura danych? Nie.

Ok, ale żeby nie było - co mi się nie podoba:
- definiujesz składowe $username oraz $password ale ich nie używasz (przekazujesz dane poprzez parametry),
- korzystasz z jakiejś własnej klasy Mysql - bez niej ani rusz (teoretycznie),
- zamiast num_rows dla SELECT * używaj po prostu SELECT COUNT(*),
- korzystasz ze stałej PREFFIX - zmuszasz mnie do ustalenia tej stałej,
- przypisujesz jakieś dane bezpośrednio do sesji - zwracaj je.

Ogólnie jest źle.
Moli
- Metody isset* powinna zwracać true/false a nie liczbę użytkowników.
Kod
while($dane = Mysql::fetass($query))

Co to za metoda fetass biggrin.gif Może chodzilo Ci o fat ass ? smile.gif
- Po jaką cholerę Ci metody insert, delete itp. skoro wszędzie i tak zapytania sql podajesz ? Po to są te metody aby tego nie robić, np. metoda insert mogła by wyglądać tak:
  1. <?php
  2. $mysql->insert($tablica_z_danymi,'nazwa_tabeli');
  3. ?>

+ uwagi które podał @phpion

Ogólnie kiepsko, upychasz wszystko na siłę w klasy. I na dodatek głupio.
phpion
Cytat(Moli @ 21.05.2009, 12:27:25 ) *
Ogólnie kiepsko, upychasz wszystko na siłę w klasy. I na dodatek głupio.

Racja. W swoim kodzie wykorzystujesz tylko metody statyczne. Moje pytanie jest więc: po co w takim razie pakujesz to wszystko w klasę? Twój kod można z DOKŁADNIE takim samym efektem/powodzeniem napisać strukturalnie za pomocą samych funkcji. Jeżeli chcesz pisać obiektowo to może najpierw naucz się myślenia i projektowania obiektowego bo na razie to po prostu używasz słów kluczowych związanych z OOP (class, public, static).
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.