• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Erste Anfänge mit OOP

xFrager

Mitglied
Hallo,
ich versuche mir grade an OOP.
Ich möchte ein Loginsystem schreiben. Dafür habe ich eine Userklasse und eine Sessionklasse.
Leider hänge ich beim starten der Session...

Hier erstmal der Code:

Session Klasse
PHP:
class Session {

    private $user;
    private $logged_in = false;

    public function __construct() {
        session_start();
    }

    public function login($username) {
        $_SESSION['username'] = $username;
        $this->user = $username;
        $this->logged_in = true;
    }

    public function logout() {
        if (isset($_SESSION['username'])) {
            unset($_SESSION['username']);
            $this->logged_in = false;
        }
    }

    public function getLoginStatus() {
        return $this->logged_in;
    }

    public function getSessionName() {
        return $this->user;
    }

}

$session = new Session();

User Klasse
PHP:
class User {
   
    private $id;
    private $username;
    private $password;
    private $email;
    private $regdate;
    private $lastlogin;
   
    public static function authentication($username, $password) {
        GLOBAL $db;
  
        $result = $db->query("SELECT * FROM `user` WHERE `username` = '{$username}' AND `password` = '{$password}'");
       
        if($result->num_rows == 1) {
            return true;
        }
        else {
            return false;
        }
    }
}

So funktioniert der Login:
PHP:
    if(isset($_POST['login'])) {
       
        $username = $db->escape_string($_POST['user']);
        $passwort = $db->escape_string($_POST['pass']);
       
        $login_result = User::authentication($username, $passwort);
       
        //var_dump($login_result);
       
        if($login_result) {
            $session->login($username);  
        }
       
    }

Das $login_result gibt true zurück, also sollte die If Bedingung ja eigentlich "starten".
Wenn ich aber var_dump($session) nutze, wird mir die $_SESSION['username'] als NULL und logged_in als false angezeigt.
Wenn ich aber an das Ende der Login Methode echo "..." schreibe, wird mir dies angezeigt. Aber warum funktioniert der Code nicht?

mfg
xFrager
 
Werbung:
Du solltest die Session zu vor auch wieder starten und bitte ordentlich danach löschen.
 
Ich habe auch eine logout.php wo die logout Methode ausgeführt wird.

Wenn ich nochmal session_start schreibe, sagt er mir, dass die session bereits gestartet wurde.
 
Werbung:
Hi,

also dein Code ist für den Anfang okay.

Gibt
PHP:
var_dump($login_result);
auch true aus?

Ein
PHP:
var_dump($_SESSION);

nach dem if-Block
PHP:
if(isset($_POST['login']))

sollte bei einer erfolgreichen Authentifikation den benötigten Session-Wert ausgeben.

Zumindest macht das dein Code bei mir in einer leicht geänderten Fassung, weil ich die DB-Abfrage nicht machen wollte:

PHP:
<?php
class Session {

   private $user;
   private $logged_in = false;

   public function __construct() {
     session_start();
   }

   public function login($username) {
     $_SESSION['username'] = $username;
     $this->user = $username;
     $this->logged_in = true;
   }

   public function logout() {
     if (isset($_SESSION['username'])) {
       unset($_SESSION['username']);
       $this->logged_in = false;
     }
   }

   public function getLoginStatus() {
     return $this->logged_in;
   }

   public function getSessionName() {
     return $this->user;
   }

}

$session = new Session();


$username = 'name';
$passwort = 'pw';
$login_result = true;
var_dump($login_result); // bool(true) # Nein, wirklich ;)
if($login_result) {
   $session->login($username);
}
var_dump($_SESSION); //array(1) { ["username"]=> string(4) "name" }

?>

Gruß
 
Ja, wenn ich var_dump($_SESSION) benutze wird der Username ausgegen.
Aber wieso funktioniert die login Methode nicht?
 
Klappt doch alles:

Folgendes habe ich an meinen Code von oben angehängt:

PHP:
var_dump($session); //object(Session)#1 (2) { ["user":"Session":private]=> string(4) "name" ["logged_in":"Session":private]=> bool(true) }
var_dump($session->getLoginStatus()); //bool(true)
 
Werbung:
Danke, da var_dump($session) in einer anderen Datei benutzt habe (Die sessionClass ist da auc included) hat es wohl nicht geklappt.
Jetzt klappt es aber ;)
 
Zurück
Oben