Hallöchen, ich hab lange rumprobiert und auch schon einige Haare ausgerissen, aber ich glaub ich bin einfach zu "doof" dazu :S
Ich hab mir eine login klasse geschrieben, die mir einerseits die userdaten überprüft und anderseits jedesmal prüft, ob der User eingeloggt ist.
Irgendwie komm ich aber nicht wirklich dahinter, wieso ich NIE den status true bekomme... kann es sein das ich es übertieben habe mit den abfragen?
bin noch ein ziemlicher anfänger was oo angeht und ehm ja...
hier mal meine klasse:
Ich weis, man kann es bestimmt besser machen und genau das möchte ich hier nun auch erreichen mit dem Thread. Was soll ich daran verbessern? Datenbankverbindung wird mit der Klasse db_handler aufgebaut und die Sessions werden in eine DB gespeichert, dafür hab ich auch ne Klasse.
Mein Prob is aber das Login :S
aufgerufen wird das ganze dann in einer logintest.php seite
So, würde mich über Hilfe und Anregungen freuen.
Gruss, Marco S.
Ich hab mir eine login klasse geschrieben, die mir einerseits die userdaten überprüft und anderseits jedesmal prüft, ob der User eingeloggt ist.
Irgendwie komm ich aber nicht wirklich dahinter, wieso ich NIE den status true bekomme... kann es sein das ich es übertieben habe mit den abfragen?
bin noch ein ziemlicher anfänger was oo angeht und ehm ja...
hier mal meine klasse:
PHP-Code:
<?php
/**
* @author Marco Schär
* @copyright 2008
* @version 0.2
* @title login_handler v0.2
*/
class login_handler {
private $db;
private $username, $password;
private $login = NULL;
private $debug = 0;
public function __construct(db_handler $db) {
$this->login = 0;
$this->db = $db;
}
public function check_userdata($username, $password) {
/*
SQL-Abfrage der Userdaten.
*/
$this->db->db_query('
SELECT
password
FROM
user
WHERE
username = "' . $this->db->escape($username) . '"
LIMIT 1
');
/*
holen der userdaten als fetch_object. zugriff durch $db->result('rückgabetyp')
*/
$userdata = $this->db->result('fetch');
/*
Setze das password aus der db in $this->password
*/
$this->password = $userdata->password;
/*
Setze den Usernamen aus dem Formular in $this->username und escape ihn mit der escape methode aus dem db-handler
*/
$this->username = $this->db->escape($username);
/*
Prüfe, ob $this->password gleich ist wie das passwort das aus dem formular kommt
*/
if($this->password == md5($password)) {
//debugfunktion, wird nur angezeigt wenn debugged wird!
if($this->debug == 1) echo "Passwort ist korrekt! liefere nun true zurück...";
$this->login = 1;
$this->set_session_data();
$this->is_loggedin();
return true;
} else {
//debugmode
if($this->debug == 1) echo "Passwort ist falsch! liefere nun false zurück...";
$this->login = 0;
return false;
}
}
public function set_session_data() {
if($this->login == 1) {
$_SESSION['login'] = 1;
$_SESSION['username'] = $this->username;
$_SESSION['password'] = $this->password;
$_SESSION['date'] = date("c");
$_SESSION['session_id'] = session_id();
//debugmode
if($this->debug == 1) {
echo "login ist 1, sessiondaten wurden geschrieben";
echo $_SESSION['login'];
echo $_SESSION['username'];
echo $_SESSION['password'];
echo $_SESSION['date'];
echo $_SESSION['session_id'];
}
/*
Setze die Session ID in die usertabelle
*/
$sessid = session_id();
/*
Update die Usertabelle mit der aktuellen session id
*/
$this->db->db_query('
UPDATE
user
SET
session_id = "{$sessid}"
WHERE
username = "{$this->db->escape($this->username)}"
LIMIT 1;
');
return true;
} else {
//debugmode
if($this->debug == 1) echo "login ist nicht auf 1 gesetzt, daher werden keine session daten geschrieben und bisherige sessioninhalte gelöscht!";
session_destroy();
return false;
}
}
public function is_loggedin() {
if($this->debug == 1) echo "bin in der funktion...";
if(isset($_SESSION['login'])) {
if($this->debug == 1) echo "komm ich bis hierhinsf?";
$this->db->db_query('
SELECT
password, username, session_id
FROM
user
WHERE
username = "' . $_SESSION['username'] . '"
LIMIT 1;
');
$userdata = $this->db->result('fetch');
if($this->debug == 1) echo "komm ich bis hierhin?";
if($userdata->session_id == $_SESSION['session_id'] && $userdata->password == $_SESSION['password'] && $userdata->username == $_SESSION['username']) {
if($this->debug == 1) {
echo "Ist eingeloggt! Sessiondaten stimmen mit der db überein.";
echo $userdata->session_id;
echo $userdata->password;
echo $userdata->username;
}
$this->login = 1;
return true;
} else {
if($this->debug == 1) echo "Sessiondaten stimmen nicht mit den daten aus der db überein -> nicht eingeloggt!";
$this->login = 0;
return false;
}
} else {
if($this->debug == 1) echo "was ist schiefgelaufen, komme nicht in die abfrage :(";
$this->login = 0;
return false;
}
}
public function set_debugmode($status) {
$this->debug = $status;
}
}
?>
Mein Prob is aber das Login :S
aufgerufen wird das ganze dann in einer logintest.php seite
PHP-Code:
<?php
/**
* @author Marco Schär
* @copyright 2008
*/
include_once('config.php');
include_once('classes/db_handler.php');
include_once('classes/login_handler_v2.php');
include_once('classes/session_handler.php');
/*
Verbinde mit der Datenbank...
*/
$db = new db_handler($cfg['db_host'], $cfg['db_user'], $cfg['db_pw'], $cfg['db_name']);
$db->connect();
/*
Neues Objekt vom session handler erstellen...
*/
$session = new session_handler($db);
/*
Erstelle neues Objekt von login_handler
*/
$login = new login_handler($db);
$login->set_debugmode(1);
if($login->is_loggedin() == true) {
$login->set_session_data();
echo "erfolgreich eingeloggt!";
} else {
include 'pages/login.php';
}
?>
So, würde mich über Hilfe und Anregungen freuen.
Gruss, Marco S.

Kommentar