tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
316
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Sketty Sketty ist offline Mitglied
    Registriert seit
    Nov 2008
    Beiträge
    16
    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
    Geändert von Sketty (03.11.08 um 11:51 Uhr)
     

  2. #2
    deostift deostift ist offline Mitglied Gold
    Registriert seit
    Apr 2003
    Ort
    Stuttgart (BW)
    Beiträge
    210
    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.
     

  3. #3
    DiDiJo DiDiJo ist offline Mitglied Brokat
    Registriert seit
    Sep 2008
    Beiträge
    285
    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
    Geändert von DiDiJo (03.11.08 um 12:10 Uhr)
     

  4. #4
    Sketty Sketty ist offline Mitglied
    Registriert seit
    Nov 2008
    Beiträge
    16
    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.
     

  5. #5
    DiDiJo DiDiJo ist offline Mitglied Brokat
    Registriert seit
    Sep 2008
    Beiträge
    285
    ja dann sollte ja alles geklärt sein oder ?! ...also nicht session_destroy(); sondern nur unset($_SESSION['Admin_variable'])
     

  6. #6
    Sketty Sketty ist offline Mitglied
    Registriert seit
    Nov 2008
    Beiträge
    16
    habe jetzt Session destroy aus beiden rausgenommen habe. Aber das Problem bleibt bestehen. Oder meinst ihr das anders?
     

  7. #7
    Avatar von Flex
    Flex Flex ist offline (aka Felix Jacobi)
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    5.295
    Blog-Einträge
    65
    Woher weiß denn dein Skript, ob du als Admin oder normaler Benutzer unterwegs bist?
    Dafür muss es doch eine zusätzliche Einstellung geben?
     
    KIDS Kinderbetreuungsdienst
    Xing

    "When you play the game of thrones, you win or you die. There is no middle ground."
    by Cersei Lannister in "A Game Of Thrones"

  8. #8
    Sketty Sketty ist offline Mitglied
    Registriert seit
    Nov 2008
    Beiträge
    16
    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.
     

  9. #9
    Avatar von Flex
    Flex Flex ist offline (aka Felix Jacobi)
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    5.295
    Blog-Einträge
    65
    Ja, aber ein Benutzer kann keine zwei Sessions gleichzeitig benutzen.

    Dafür müsstest du dir eine eigene Session Routine basteln und mit session_set_save_handler() 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 unset() bzw. session_unset() nicht zu empfehlen.

    Besser wäre den Session Array zu überschreiben.

    PHP-Code:
    $_SESSION = array(); 
     
    KIDS Kinderbetreuungsdienst
    Xing

    "When you play the game of thrones, you win or you die. There is no middle ground."
    by Cersei Lannister in "A Game Of Thrones"

  10. #10
    Sketty Sketty ist offline Mitglied
    Registriert seit
    Nov 2008
    Beiträge
    16
    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");
    }

    ?>
     

  11. #11
    Avatar von Flex
    Flex Flex ist offline (aka Felix Jacobi)
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    5.295
    Blog-Einträge
    65
    Also, da gibt es erstmal einen wichtigen Punkt zu beanstanden. Du maskierst deine Input Werte nicht vernünftig und ermöglichst somit SQL Injektionen.
    Die Funktion für dich heißt: mysql_real_escape_string()

    Außerdem empfehle ich dir statt $_REQUEST den richtigen Typen zu wählen, also $_GET für Werte aus der URL und $_POST für Werte aus einem Formular.

    Ansonsten sehe ich kein Problem, dein Skript auf die oben erwähtne Weise zu ändern.
     
    KIDS Kinderbetreuungsdienst
    Xing

    "When you play the game of thrones, you win or you die. There is no middle ground."
    by Cersei Lannister in "A Game Of Thrones"

  12. #12
    Sketty Sketty ist offline Mitglied
    Registriert seit
    Nov 2008
    Beiträge
    16
    danke hat nun wunderbar alles geplappt.
     

Ähnliche Themen

  1. Mehrfaches absenden von Formular verhindern
    Von Peter Klein im Forum PHP
    Antworten: 11
    Letzter Beitrag: 06.09.08, 17:24
  2. Mehrfaches.. Problem...
    Von S-lord im Forum PHP
    Antworten: 8
    Letzter Beitrag: 19.12.07, 17:51
  3. Antworten: 7
    Letzter Beitrag: 30.11.07, 15:01
  4. Antworten: 3
    Letzter Beitrag: 08.05.07, 09:36
  5. Ein-Ausloggen
    Von Lord_Blade im Forum PHP
    Antworten: 5
    Letzter Beitrag: 17.03.03, 18:42