Hallo,
ich habe folgende Login-Klasse erstellt, ist allerdings so ziemlich das erst OOP-Projekt. Deswegen möchte ich die Erfahrenen mal bitten, sich die Klasse anzusehen und Tipps zu geben.
Ausserdem hab ich noch ein Problem:
Die Funktion checkProfile() soll in der Funktion checkUser() nur dann ausgeführt werden, wenn bei der Funktion loginUser() der Parameter $profile gesetzt wurde. Allerdings weis ich nicht, wie ich herausfinden soll, dass dieser gesetzt wurde, ausser über ne Session-Variable oder ne include-Datei, was ich allerdings für nicht elegant gelöst halte. Zu prüfen ob der Paramter $autologin gesetzt wurde ist ja nicht schwer, da muss man ja nur prüfen, ob ein Cookie gesetzt ist.
Hier der Code:
	
Hab bei jeder Funktion noch den Rückgabewert dabei, obwohl nur der von den Funktionen loginUser(), checkUser() und logoutUser() benötigt wird. Habe das noch drin, weil ich gerne prüfen wollte, ob die Funktionen auch richtig ausgeführt wurden. Da wäre es doch angebracht Exceptions zu benutzen, falls die Funktionen nicht richtig ausgeführt werden, oder?
Hoffe ihr könnt mir helfen.
MfG,
ill-maestro
					ich habe folgende Login-Klasse erstellt, ist allerdings so ziemlich das erst OOP-Projekt. Deswegen möchte ich die Erfahrenen mal bitten, sich die Klasse anzusehen und Tipps zu geben.
Ausserdem hab ich noch ein Problem:
Die Funktion checkProfile() soll in der Funktion checkUser() nur dann ausgeführt werden, wenn bei der Funktion loginUser() der Parameter $profile gesetzt wurde. Allerdings weis ich nicht, wie ich herausfinden soll, dass dieser gesetzt wurde, ausser über ne Session-Variable oder ne include-Datei, was ich allerdings für nicht elegant gelöst halte. Zu prüfen ob der Paramter $autologin gesetzt wurde ist ja nicht schwer, da muss man ja nur prüfen, ob ein Cookie gesetzt ist.
Hier der Code:
PHP-Code:
	
	
<?php
    class user
    {
        protected $db;
        protected $u_id;
        protected $u_name;
        protected $u_pw;
        protected $profile;
        
        
        //SESS starten und DB_CONN angeben und angeben nach welcher Zeit (Min.) automatisch ausgeloggt werden soll
        public function __construct($db, $logout_time = 15, $profile = false)
        {
            session_start();
            $this->db = $db;
            $this->autoLogout($logout_time);
            $this->profile = $profile;
        }
        
        
        //NAME und PW mit DB vergleichen
        public function loginUser($u_name, $u_pw, $autologin = false)
        {
            $this->u_name = $u_name;
            $this->u_pw   = $u_pw;
            
            $sql    = 'SELECT
                           id
                       FROM
                           user
                       WHERE
                           name = "' .$this->db->real_escape_string($this->u_name). '"
                       AND
                           pw = SHA1("' .$this->db->real_escape_string($this->u_pw). '")';
            
            $result = $this->db->query($sql);
            $row    = $result->fetch_assoc();
            
            $this->u_id = $row['id'];
            
            if ($result->num_rows == 1) {
                $_SESSION['u_id']   = $this->u_id;
                $_SESSION['u_name'] = $this->u_name;
                
                if ($this->profile) {
                    $this->loginProfile();
                }
                
                if ($autologin) {
                    $this->setAutologin();
                }
                
                return true;
            } else {
                return false;
            }
        }
        
        
        //PROFIL aktualisieren (einloggen)
        protected function loginProfile()
        {
            $sql    = 'UPDATE
                           user
                       SET
                           sess_id = "' .session_id(). '",
                           last_action = NOW(),
                           last_login = NOW()
                       WHERE
                           id = "' .$this->u_id. '"';
            $result = $this->db->query($sql);
            
            return $result;
        }
        
        
        //AUTOLOGIN aktivieren
        protected function setAutologin()
        {
            $autologin_id = sha1(mt_rand().$_SERVER['REMOTE_ADDR'].microtime());
            
            setCookie('autologin', $autologin_id, time()+60*60*24*365);
                    
            $sql    = 'UPDATE
                           user
                       SET
                           autologin = "' .$autologin_id. '"
                       WHERE
                           id = "' .$this->u_id. '"'; 
            $result = $this->db->query($sql);
            
            return $result;
        }
        
        
        //SESS zerstören
        public function logoutUser()
        {           
            if ($this->profile) {
                $this->logoutProfile();
            }
            
            if (isset($_COOKIE['autologin'])) {
                $this->unsetAutologin();
            }
            
            if (session_unregister('u_id') && session_unregister('u_name')) {
                return true;
            } else {
                return false;
            }
        }
        
        
        //PROFIL aktualisieren (ausloggen)
        protected function logoutProfile()
        {           
            $sql = 'UPDATE
                        user
                    SET
                        sess_id = NULL,
                        autologin = NULL
                    WHERE
                        id = "'.$_SESSION['u_id'].'"';
            $result = $this->db->query($sql);
            
            return $result;
        }
        
        
        //AUTOLOGIN deaktivieren
        protected function unsetAutologin()
        {
            $sql = 'UPDATE
                        user
                    SET
                        autologin = NULL
                    WHERE
                        id = "'.$_SESSION['u_id'].'"';
            $result = $this->db->query($sql);
            
            return setCookie('autologin', '', time()-60*60);
        }
        
        
        //Prüfen ob USER eingeloggt ist
        public function checkUser()
        {
            if (isset($_SESSION['u_id'], $_SESSION['u_name'])) {
                if ($this->profile) {
                    $this->loginProfile();
                }
                
                return true;
            } else if (isset($_COOKIE['autologin'])) {
                return $this->checkCookie();
            } else {
                return false;
            }
        }
        
        
        //Prüfen ob COOKIE gesetzt ist
        protected function checkCookie()
        {
                $sql    = 'SELECT
                              id, name
                          FROM
                              user
                          WHERE
                              autologin = "' .$this->db->real_escape_string($_COOKIE['autologin']). '"';
                $result = $this->db->query($sql);
                $row    = $result->fetch_assoc();
                
                $this->u_id   = $row['id'];
                $this->u_name = $row['name'];
                
                if ($result->num_rows == 1) {
                    $_SESSION['u_id']   = $this->u_id;
                    $_SESSION['u_name'] = $this->u_name;
                    
                    return $this->checkUser();
                }
        }
        
        
        //PROFIL aktualisieren (eingeloggt)
        protected function checkProfile()
        {
            $sql    = 'SELECT
                           sess_id
                       FROM
                           user
                       WHERE
                           id = "' .$_SESSION['u_id']. '"';
            $result = $this->db->query($sql);
            $row    = $result->fetch_assoc();
                
            if (session_id() != $row['sess_id']) {
                $this->logoutUser();
                return false;
            } else {
                $sql    = 'UPDATE
                               user
                           SET
                               last_action = NOW() 
                           WHERE
                               id = "' .$_SESSION['u_id']. '"';  
                $result = $this->db->query($sql);
                
                return $result;
            }
        }
        
        
        //USER nach einer bestimmten Zeit von Inaktivität ausloggen
        private function autoLogout($logout_time)
        {
            $sql    = 'UPDATE
                           user
                       SET
                           sess_id = NULL
                       WHERE
                           last_action < DATE_SUB(NOW(), INTERVAL ' .$logout_time. ' MINUTE)
                       AND
                           autologin = ""';
            $result = $this->db->query($sql);
            
            return $result;
        }
    }
    
    $db = new mysqli('localhost', 'root', '', 'test');
    $user = new user($db, 15, 1);
?>
Hoffe ihr könnt mir helfen.
MfG,
ill-maestro
 
          
 Moderator
 Moderator 
 
 
							
						
Kommentar