Login mit Sessions

msycho

Erfahrenes Mitglied
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:

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?
 
Übergibst du die Session auch richtig?

Und außerdem sollte in der ausgabe.php session_start() vorkommen, brauchst du es nicht nochmal in deiner checkuser.php.
 
Wie meinst Du ob ich die Session richtig übergebe?
Alles was mit der Session / dem Login zu tun hat, steht im ersten Post. Wie gesagt, lokal funktioniert ist so wie soll, nur nicht "online", zumindest was die checkuser.php betrifft.
 
Das liegt wahrscheinlich daran, dass lokal bei dir session.use_cookies aktiviert ist und auf deinem Webspace nicht.
Überprüfen kannst du das mit phpinfo()

Ansonsten musst du bei den Links die Session ID mitgeben, z. B. so:
PHP:
<a href="bla.php?s=<?php session_id(); ?>">Link</a>
 
Zurück