Ich hätte da mal ein paar Fragen.
1) Ist der Weg, wie ich den Internen Bereich sichere in Ordnung? Ich hab bei diesem Projekt nur eine index.php, der rest sind Klassen.
index.php:
In der index.php wird einfach überprüft, ob $_SESSION['user']['login'] true ist, falls ja, wird dem eingeloggten User der Inhalt angezeigt, ansonsten wird eine Methode namen printLoginForm ausgerufen, die, wie der Name schon sagt, ein Login Formular ausgibt.
Wie sollte man bei einem größeren Projekte diesen Abschnitt lösen? Ist das so In Ordnung wie ich es gestalte? Oder sollte ich bei einem erfolgreichen Login nicht auf die index.php, sondern auf eine andere Page den eingeloggten User schicken, zb. intern.php oder was auch immer?
Nun noch eine 2. Frage:
Die Login Klasse sieht so aus:
Wie man sehen kann überprüfe ich verschiedene Dinge:
- wurde ein Feld freigelassen
- gibts es den Usernamen überhaupt
- ist die Kombination aus password und username nicht korrekt
Trifft eines dieser Dinge zu, gebe ich einfach mit return false zurück, trifft keines dieser Dinge zu, gebe ich true zurück. In der Index.php überprüfe ich nun, ob die Methode true oder false zurückgibt. Das ganze funktioniert auch alles - nur weiß ich nicht, wieso die Methode false zurück gibt, da ich ja nicht den Grund für das false mitsende. Das false kann durch eine der 3 oben genannten Dinge auftreten -das ist mir aber zu ungenau. Ich will mit dem return zum Einen false bzw true zurück geben, zum Anderen auch noch die Fehlermeldung. Wie löse ich das am besten?
Bei einem True will ich noch die User ID, die ich mit dem Query abfrage an die index.php übermitteln, da ich diese im internen Bereich benötige, um den User bei späteren Aktionen zu identifizieren.
Nochmal kurz zusammengefasst:
Tritt ein Fehler auf, will ich false und die dazu gehörende Fehlermeldung zurück geben. Tritt kein Fehler auf, will ich ein true und die User ID übermitteln.
Wäre euch sehr dankbar, für gute Lösungsansätze! :-)
Grüße
1) Ist der Weg, wie ich den Internen Bereich sichere in Ordnung? Ich hab bei diesem Projekt nur eine index.php, der rest sind Klassen.
index.php:
PHP:
<?php
session_start();
include("inc/includeAllClasses.php");
if($_SESSION['user']['login'] == false)
{
HTML::printHead();
echo '<link rel="stylesheet" type="text/css" href="startseite.css">';
HTML::prinBody();
$login = new login();
$login->printLoginForm();
if(isset($_POST['doLogin']))
{
if($login->checkLoginData)
{
$_SESSION['user']['login'] = true;
header("Location: index.php"); //Die seite einfach neu laden
}
else
{
echo 'Fehler'
}
}
HTML::printFoot();
}
else
{
HTML::printHead();
echo '<link rel="stylesheet" type="text/css" href="internes.css">';
HTML::prinBody();
//ander Objekte erstellen, Inhalt für den internen Bereich laden
HTML::printFoot();
}
?>
Wie sollte man bei einem größeren Projekte diesen Abschnitt lösen? Ist das so In Ordnung wie ich es gestalte? Oder sollte ich bei einem erfolgreichen Login nicht auf die index.php, sondern auf eine andere Page den eingeloggten User schicken, zb. intern.php oder was auch immer?
Nun noch eine 2. Frage:
Die Login Klasse sieht so aus:
PHP:
<?php
class Login
{
public function printLoginForm()
{
echo '<form action="" method="post" />';
echo '<input type="text" name="username" />';
echo '<input type="password" name="password" />';
echo '<input type="submit" name="doLogin" />';
echo '</form>';
}
public function checkLoginData($username, $password)
{
if($username == "" OR $password == "")
{
return false;
}
else
{
$sql = MySQL::query("SELECT `id`, `username`, `password` FROM `users` WHERE `username` = '".mysql_real_escape_string($username)."'");
if(mysql_num_rows($sql) == 0)
{
//des Username existiert nich
return false;
}
else
{
$row = mysql_fetch_object($sql);
if($row->password == $password)
{
return true;
}
else
{
return false;
}
}
}
}
}
?>
- wurde ein Feld freigelassen
- gibts es den Usernamen überhaupt
- ist die Kombination aus password und username nicht korrekt
Trifft eines dieser Dinge zu, gebe ich einfach mit return false zurück, trifft keines dieser Dinge zu, gebe ich true zurück. In der Index.php überprüfe ich nun, ob die Methode true oder false zurückgibt. Das ganze funktioniert auch alles - nur weiß ich nicht, wieso die Methode false zurück gibt, da ich ja nicht den Grund für das false mitsende. Das false kann durch eine der 3 oben genannten Dinge auftreten -das ist mir aber zu ungenau. Ich will mit dem return zum Einen false bzw true zurück geben, zum Anderen auch noch die Fehlermeldung. Wie löse ich das am besten?
Bei einem True will ich noch die User ID, die ich mit dem Query abfrage an die index.php übermitteln, da ich diese im internen Bereich benötige, um den User bei späteren Aktionen zu identifizieren.
Nochmal kurz zusammengefasst:
Tritt ein Fehler auf, will ich false und die dazu gehörende Fehlermeldung zurück geben. Tritt kein Fehler auf, will ich ein true und die User ID übermitteln.
Wäre euch sehr dankbar, für gute Lösungsansätze! :-)
Grüße