Sessions für Logout notwendig?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Sessions für Logout notwendig?

    Es ist so, dass ich bei dem Programm, das ich im Moment programmiere, ein Login und ein Logout ermöglichen möchte. Das mit dem Login klappt auch ganz gut. Aber diese Logout-Sache funktioniert nicht, wo ich schon zu dem Hauptproblem komme. Als mit der Implementierung angefangen habe, habe ich erst das Login gemacht und weil das nicht so schwer war dachte ich, dass das Logout sicher auch ganz easy ist und hab das immer vor mich her geschoben. Nun muss ich das Programm Ende der Woche abgeben und ich stelle fest, dass so ein Logout mit Sessions arbeitet - die habe ich aber im Programm nicht verwendet (bzw. baut mein Programm auf einem Fremdprogramm auf, dass in ein anderes System integriert gewesen ist und das Login und Logout des Systems genutzt hat...ist ne lange Geschichte).

    Meine Frage ist nun, ob man das Logout auch ohne Sessions machen kann?

    Hier die index.php

    Quellcode

    1. <?
    2. $main=true;
    3. include ("generalFormhandler.php");
    4. ?>


    Hier die Funktion im general Formhandler, der das Login überprüft:

    Quellcode

    1. if (!isset($_SERVER['PHP_AUTH_USER'])) {
    2. Header("WWW-Authenticate: Basic realm=\"Programm\"");
    3. Header("HTTP/1.0 401 Unauthorized");
    4. echo "Bitte geben sie Benutzernamen und Passwort ein\n";
    5. exit;
    6. }
    7. /**
    8. * Hier wird bestimmt, welchen Status der Benutzer hat und entsprechend weitergeleitet
    9. * $userdata[status] 1 = quizmoderator
    10. * 2 = benutzer
    11. * 3 = admin
    12. *
    13. */
    14. if(sizeof($_POST)==0 AND $userdata[status]==1 ){
    15. include_once($BASE."handler_manageQuiz.php");
    16. }
    17. if(sizeof($_POST)==0 AND $userdata[status]==2 ){
    18. include_once($BASE."handler_showQuizzes.php");
    19. }
    20. if(sizeof($_POST)==0 AND $userdata[status]==3 ){
    21. include_once($BASE."handler_userAdministration.php");
    22. }
    Alles anzeigen


    Ich habe dann neben der index.php eine logout.php erstellt. Die sieht so aus:

    Quellcode

    1. if (isset ($_POST["logout"])){
    2. session_start();
    3. session_destroy();
    4. header("Location: index.php?");
    5. }


    Das klappt natürlich nicht so - und ich kann mir vorstellen, dass das an der nicht vorhandenen Session liegt. Die logout.php möchte eine session schließen, die ich gar nicht gestartet habe. Ich weiß nur nicht, wie man diese Session sache nun in mein Programm integriert. Muss ich dazu nun in jede Klasse und jede Funktion ein $session_start(); einfügen? Oder kann ich das Logout auch ohne Session machen?

    Ich hoffe, die Frage ist nicht zu banal. Das Programm ist meine erste PHP-Programmierung und ich danke euch für jeden kleinen Hinweis, wie ich das irgendwie zum Laufen bringen kann.
  • d0nut schrieb:

    Du musst einfach nur die Variable $_SERVER["PHP_AUTH_USER"] löschen ([phpdoc]unset[/phpdoc]) oder überschreiben.
    Ehm...an welcher Stelle mache ich das genau? Ich habs in die logout.php geschrieben:

    Quellcode

    1. if (isset ($_POST["logout"])){
    2. session_start();
    3. session_destroy();
    4. unset($_SERVER['PHP_AUTH_USER']);
    5. }


    Das hat aber irgendwie nicht funktioniert. Muss das an eine andere Stelle?
  • Ok, jetzt bin ich verwirrt ;)

    Also, die Ordnerstruktur ist wie folgt:
    Meine index.php ist quasi der Eingang zum generalFormhandler, wo auch der Login abgewickelt wird. Der generalFormhandler, die index.php und die logout.php liegen in einem Ordner über den anderen Klassen (z.B. der Klasse, die sich um die Datenbank kümmert, die Methoden zum Erstellen von Userkonten usw.). Jede Funktion die ausgeführt wird, geht bei mir über den generalFormhandler, der dann die entsprechenden Befehle und Variablen weiterleitet. Ich habe quasi die Grundstruktur des Programms, auf dem meins nun basiert, belassen.

    Ich weiß nun aber nicht genau wie ich deinen Hinweis genau deuten soll...ich dachte die logout-Sache kommt in ein eigenes php-file, wie die index.php...oder lieg ich da falsch?
  • klar, kannst du die Logout Seite auch seperat von der Anwendung betrachten und auf einer eigenen Seite implementieren.
    logout.php wird also direkt aufgerufen? Dann musst du die Passwort Abfrage einfach nochmal danach aufrufen.

    [phpdoc]features.http-auth[/phpdoc]
    Sowohl Netscape als auch der Internet Explorer löschen den lokalen Authentifizierungscache des Browserfensters, wenn der Server eine 401-Meldung zurückgibt. Dies kann benutzt werden, um einen Benutzer "auszuloggen" und eine erneute Eingabe des Benutzernamens/Passworts zu erzwingen. Manchmal wird dieses Verhalten für das automatische Ausloggen nach Ablauf einer bestimmten Zeitspanne oder für einen Logout-Button genutzt.