mehrfaches ausloggen verhindern

Sketty

Grünschnabel
Hallo, ich habe eine Webseite erstellt, wo Kunden sich für eine gesicherte Seite anmelden müssen. Desweiteren habe ich noch einen Adminbereich, der ebenfalls nur durch Name und Kennwort erreichbar ist.

Das einloggen funktioniert bei beiden Bereichen. Ich arbeite mit Sessions. Es wird überprüft ob man eingeloggt ist, und erst dann kommt man weiter. Habe auch die Möglichkeit sich über die URL einzloggen, verhindert. Man kann nach dem man eingeloggt ist, auf der ganzen Webseite unterwegs sein und man bleibt eingeloggt.

Nun mein Problem, wenn ich mich als Kunde anmelde und dann als Admin (funktioniert natürlich auch), brauche ich nur einen ausloggen. Egal ob ich mich als Kunde oder Admin abmelde, es sind dann immer alle beide ausgeloggt. Wie kann ich das verhindern?

zum ausloggen der Kunden:

<?php

ob_start ();

session_start ();
session_unset ($_SESSION['benutzername'] || $_SESSION['benutzerkennwort']);
session_destroy ();

header ("Location: referenzen.php");
ob_end_flush ();
?>


zum ausloggen des Admins:

<?php

ob_start ();

session_start ();
session_unset ($_SESSION['M_admin_name']);
session_destroy ();

header ("Location: admin_login.php");
ob_end_flush ();
?>

Hoffe ihr könnt mir helfen, danke
 
Zuletzt bearbeitet:
Hallo Sketty,

schau mal hier: http://de3.php.net/manual/de/intro.session.php

"Einem Besucher wird beim Aufruf Ihrer Website eine eindeutige ID, die sogenannte Session-ID, zugeordnet. Diese wird entweder benutzerseitig in einem Cookie abgelegt oder in der URL übermittelt."

Wenn Du nun mit session_destroy() arbeitest, werden alle Session Daten gelöscht. Damit sind jegliche Login Informationen gelöscht.


Andere Frage: Weshalb muss sich denn der Benutzer zwei mal einloggen? Ich persönlich würde die Benutzerverwaltung so aufbauen, dass Benutzer mit Admin-Rechten nach erfolgreicher Authentifizierung auch gleich die Admin Optionen sehen können. Entweder ein Benutzer hat Admin Rechte oder nicht. Mit zwei unterschiedlichen Logins zu arbeiten macht wenig Sinn.
 
jenachdem wieivel Session Variablen du hast oder benutzt ... würde es nicht ausreichen, wenn du nur die Session Variabeln löscht anstatt direkt die ganze Session zu "zerstören" / löschen ?!. Dadurch sollte man als kunde noch angemeldet bleiben wenn man sich vorher als kunde im admin bereich eingeloggt !

edit:
da war doch glatt wer schneller
 
Zuletzt bearbeitet:
nein die Kunden müssen sich nicht 2mal einloggen. Ich habe eine Webseite mit mehreren Rubriken. In einer müssen sich die Kunden anmelden, um sie zu sehen. Benutzername und Kennwort bekommen sie von den Admin. Im Adminbereich, wo dieser sich auch anmelden muss, kann er neue Kunden mit Name und Passwort anlegen, sowie noch vieles mehr. Ebenfalls bearbeitet er dort den Inhalt der gesicherten Rubrik. Um zu überprüfen ob Inhalt korrekt angezeigt wird, oder ob ein Benutzer und Kennwort richtig angenommen werden, sollte er sich auch dort anmelden können. Also kann der Admin sich 2 mal seperat anmelden. Meldet er sich allerdings bei einem der beiden ab, ist er bei beiden abgemeldet.
 
ja dann sollte ja alles geklärt sein oder ?! ...also nicht session_destroy(); sondern nur unset($_SESSION['Admin_variable'])
 
habe jetzt Session destroy aus beiden rausgenommen habe. Aber das Problem bleibt bestehen. Oder meinst ihr das anders?
 
Woher weiß denn dein Skript, ob du als Admin oder normaler Benutzer unterwegs bist?
Dafür muss es doch eine zusätzliche Einstellung geben?
 
wie meinst du das? Die jeweiligen Sessions, haben doch ihre eigenen Variablen/Namen. Dieser steht doch auch bei unset dahinter. Und wenn ich mich nur als Kunde anmelde, bin ich ja nicht gleichzeitig als Admin angemeldet oder anders herum.
 
Ja, aber ein Benutzer kann keine zwei Sessions gleichzeitig benutzen.

Dafür müsstest du dir eine eigene Session Routine basteln und mit [phpf]session_set_save_handler[/phpf] registrieren.

Aber am einfachsten wäre wohl, hier Quelltext zu zeigen, damit wir dir Tipps geben können.

Mein spontaner Tipp:
Wenn der Admin Login klappt, erweiter die Session einfach nur um ein Admin Flag ("isAdmin" und setz es auf "boolean true"). Beim Ausloggen aus dem Adminbereich löschst du einfach nur den Flag und nicht die Session.

Übrigens ist das benutzen von [phpf]unset[/phpf] bzw. [phpf]session_unset[/phpf] nicht zu empfehlen.

Besser wäre den Session Array zu überschreiben.

PHP:
$_SESSION = array();
 
für den Admin:

<? session_start();

$connection = mysql_connect("localhost", "root" , "")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("muetra_admin_login") or die ("Datenbank konnte nicht ausgew&auml;hlt werden");

$M_admin_name = $_REQUEST['M_admin_name'];
$M_admin_kennwort = md5($_REQUEST['M_admin_kennwort']);

$sql = "SELECT * FROM muetra_admin_login WHERE M_admin_name = '".$M_admin_name."' AND M_admin_kennwort = '".$M_admin_kennwort."'";
$return = mysql_query($sql);
$count = mysql_num_rows($return);

if($count == 1)
{
$_SESSION['M_admin_name'] = $M_admin_name || $_SESSION['M_admin_kennwort'] = $M_admin_kennwort;
header("Location: admin.php");
}

?>


für den Kunden:

<? session_start();

$connection = mysql_connect("localhost", "root" , "")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("kundenlogin") or die ("Datenbank konnte nicht ausgew&auml;hlt werden");

$benutzername = $_REQUEST['benutzername'];
$benutzerkennwort = md5($_REQUEST['benutzerkennwort']);

$sql = "SELECT * FROM kundenlogin WHERE benutzername = '".$benutzername."' AND benutzerkennwort = '".$benutzerkennwort."'";
$return = mysql_query($sql);
$count = mysql_num_rows($return);
if($count == 1)
{
$_SESSION["benutzername"] = $benutzername || $_SESSION["benutzerkennwort"] = $benutzerkennwort;
header("Location: referenzen_inhalt.php");
}

?>
 
Zurück