Hallo!
Ich bin nach diesem Tutorial gegangen: http://www.tutorials.de/forum/php-tutorials/9684-php-mysql-login-system-mit-sessions.html
Ich habe in der Datenbank eine Tabelle mit zwei Spalten, Username und Passwort. Nun habe ich ein Loginformular mit welchem ich mich anmelde. Sind die Benutzerdaten korrekt, werde ich zum "internen Bereich" weitergeleitet. Jetzt soll es so sein, dass wenn ich auf den internen Bereich direkt zugreife und ich nicht eingeloggt bin, ich zum Login zurückgeleitet werden. Das ganze klappt lokal einwandfrei, nur eben nicht auf dem Webserver. Dort komme ich auf den internen Bereich auch wenn ich nicht eingeloggt bin.
In der index.php wird die Session gestartet gleich als erstes:
Hat man in der index.php seine Daten eingegeben wird man im Hintergrund zur login.php weitergeleitet:
Sind die Benutzerdaten korrekt, kommt man zum internen Bereich, der ausgabe.php:
Dort wird gleich zu Beginn geprüft bzw. sollte geprüft werden ob die Session noch besteht:
Der Logout läuft folgendermaßen ab:
Die checkuser.php, die die den internen Bereich includet wird und eigentlich überprüfen soll ob eine Session besteht, hat folgenden Quellcode:
Nun, wieso funktioniert die Überprüfung in der ausgabe.php über die checkuser.php nicht?
Nochmals ich komme in den internen Bereich, obwohl ich nicht eingeloggt bin und keine Session angelegt wurde und das darf nicht sein.
Wurde die Session nicht ordentlich gelöscht nach dem Logout? Kann das was mit Zugriffsrechten auf Ordner zu tun haben? Liegt es an Einstellungen in der php.ini? Bei mir lokal funktioniert ja das ganze.
Könnt Ihr mir helfen, bitte?
Ich bin nach diesem Tutorial gegangen: http://www.tutorials.de/forum/php-tutorials/9684-php-mysql-login-system-mit-sessions.html
Ich habe in der Datenbank eine Tabelle mit zwei Spalten, Username und Passwort. Nun habe ich ein Loginformular mit welchem ich mich anmelde. Sind die Benutzerdaten korrekt, werde ich zum "internen Bereich" weitergeleitet. Jetzt soll es so sein, dass wenn ich auf den internen Bereich direkt zugreife und ich nicht eingeloggt bin, ich zum Login zurückgeleitet werden. Das ganze klappt lokal einwandfrei, nur eben nicht auf dem Webserver. Dort komme ich auf den internen Bereich auch wenn ich nicht eingeloggt bin.
In der index.php wird die Session gestartet gleich als erstes:
PHP:
// Session wird gestartet
session_start ();
Hat man in der index.php seine Daten eingegeben wird man im Hintergrund zur login.php weitergeleitet:
PHP:
session_start ();
// Verbindung zur Datenbank herstellen
$dbverbindung = mssql_connect('xx', 'xx', 'xx') or die (mssql_get_last_message());
mssql_select_db ('xx', $dbverbindung) or die (mssql_get_last_message());
// Benutzerdaten werden abgefragt
$sql = "SELECT benutzername FROM account WHERE (benutzername = '".$_REQUEST["loginname"]."') AND (kennwort = '".md5 ($_REQUEST["loginpw"])."')";
$ergebnis = mssql_query ($sql);
// Anzahl der Datensaetze wird abgefragt
if (mssql_num_rows ($ergebnis) > 0)
{
// Benutzerdaten als Array auslesen
$data = mssql_fetch_array ($ergebnis);
// Sessionvariable erstellen und registrieren
$_SESSION["user_nickname"] = $data["benutzername"];
// Sind Benutzerdaten richtig, wird zum eigentlichen (internen) Bereich weitergeleitet
header ("Location: ausgabe.php");
}
else
{
// Bei falschen Benutzerdaten, wird man zum Login zurueckgeleitet und es wird eine Fehlermeldung angezeigt
header ("Location: index.php?error=1");
}
// Verbindung zum MS SQL Server wird geschlossen
mssql_close() or die (mssql_get_last_message());
Sind die Benutzerdaten korrekt, kommt man zum internen Bereich, der ausgabe.php:
Dort wird gleich zu Beginn geprüft bzw. sollte geprüft werden ob die Session noch besteht:
PHP:
// Daten der Session werden ueberprueft
include ("checkuser.php");
Der Logout läuft folgendermaßen ab:
PHP:
// Pufferung der Ausgabe wird aktiviert, weil die Session erst geloescht werden muss
ob_start ();
session_start ();
session_unset ();
session_destroy ();
// Bei erfolgreichem Logout wird man zum Login weitergeleitet und es wird eine Meldung angezeigt
header ("Location: index.php?logout=1");
// Pufferung wird aufgehoben und die Ausgabe erfolgt
ob_end_flush ();
Die checkuser.php, die die den internen Bereich includet wird und eigentlich überprüfen soll ob eine Session besteht, hat folgenden Quellcode:
PHP:
session_start ();
if ( !isset ( $_SESSION["user_nickname"] ) )
{
// Bei abgelaufener Session wird man zum Login zurueckgeleitet und es wird eine Fehlermeldung angezeigt
header ("Location: index.php?sessionerror=1");
}
Nun, wieso funktioniert die Überprüfung in der ausgabe.php über die checkuser.php nicht?
Nochmals ich komme in den internen Bereich, obwohl ich nicht eingeloggt bin und keine Session angelegt wurde und das darf nicht sein.
Wurde die Session nicht ordentlich gelöscht nach dem Logout? Kann das was mit Zugriffsrechten auf Ordner zu tun haben? Liegt es an Einstellungen in der php.ini? Bei mir lokal funktioniert ja das ganze.
Könnt Ihr mir helfen, bitte?