f34rless: session_start (); ??

Hallo,

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Programme\xampp\htdocs\pcs\login.php:9) in C:\Programme\xampp\htdocs\pcs\login.php on line 13

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Programme\xampp\htdocs\pcs\login.php:9) in C:\Programme\xampp\htdocs\pcs\login.php on line 13

Öhhmmmmmm, jetzt bin ich div. Seiten auf www.php.net durchgegangen, aber irgendwie werd ich das Gefühl nicht los, das mein Apache lokal irgendwie nicht richtig konfiguriert ist.
Hier mal der Code, vielleicht bin ich auch nur zu blöd. Ich poste euch einmal die login.php.

....
Code

<?php
$name = "xxxxxxxxx";
$pass = "xxxxxxxxx";

session_start ();

if (isset ($_POST['SUBMIT_LOGIN'])){
  if ($_POST['USERNAME'] == $name && $_POST['PASSWORD'] == $pass){
    $_SESSION['ONLINE'] = TRUE;
    }
  else {
    echo "Benutzereingaben sind nicht korrekt.";
    }
}
else{
?>
<form action="login.php" method="post">
<input name="USERNAME" type="text"><br>
<input name="PASSWORD" type="password"><br>
<input name="SUBMIT_LOGIN" type="submit" value="ANMELDEN">
</form>
<?php
}

if ($_SESSION['ONLINE'] == TRUE){
  echo "SESSION LAEUFT ! < /br>";
  echo "<a href="login.php?logout">LOGOUT</a>";
  }
if ($_GET['LOGOUT']){
  unset ($_SESSION['ONLINE']);
  session_destroy ();
  }
?>

Hat jemand von euch eine Idee?
Viellen Dank

LG
f34rless

--
------------------
http://rem-clan.de
  1. hi,

    Hier mal der Code, vielleicht bin ich auch nur zu blöd. Ich poste euch einmal die login.php.

    <?php
    $name = "xxxxxxxxx";
    $pass = "xxxxxxxxx";

    session_start ();

    Das ist doch wohl kaum der komplette Code der login.php?
    Schließlich besagt die Meldung, dass dein session_start() in Zeile 13 stehen würde, und dass die Ausgabe in Zeile 9 begonnen wurde.

    Du hast also höchstvermutlich vor dem <?php noch etwas stehen, was dort nicht hin darf.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      Das ist doch wohl kaum der komplette Code der login.php?
      Schließlich besagt die Meldung, dass dein session_start() in Zeile 13 stehen würde, und dass die Ausgabe in Zeile 9 begonnen wurde.

      Die komplette login.php

      ....
      CODE

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
      <title>Unbenanntes Dokument</title>
      </head>

      <body>
      <?php
      $name = "f34rless";
      $pass = "00381946";

      session_start ();

      if (isset ($_POST['SUBMIT_LOGIN'])){
        if ($_POST['USERNAME'] == $name && $_POST['PASSWORD'] == $pass){
          $_SESSION['ONLINE'] = TRUE;
        }
        else {
          echo "Benutzereingaben sind nicht korrekt.";
        }
      }
      else{
      ?>
      <form action="login.php" method="post">
      <input name="USERNAME" type="text"><br>
      <input name="PASSWORD" type="password"><br>
      <input name="SUBMIT_LOGIN" type="submit" value="ANMELDEN">
      </form>
      <?php
      }

      if ($_SESSION['ONLINE'] == TRUE){
        echo "SESSION LAEUFT !";
        echo "<a href="login.php?logout">LOGOUT</a>";
      }
      if ($_GET['LOGOUT']){
        unset ($_SESSION['ONLINE']);
        session_destroy ();
        }
      ?>
      </body>
      </html>

      LG
      f34rless

      1. Moin!

        Das ist doch wohl kaum der komplette Code der login.php?
        Schließlich besagt die Meldung, dass dein session_start() in Zeile 13 stehen würde, und dass die Ausgabe in Zeile 9 begonnen wurde.

        Die komplette login.php

        ....
        CODE

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <title>Unbenanntes Dokument</title>
        </head>

        <body>
        <?php

        Dann ist die Sache doch klar. Und du hast gegen das typische Gebot verstoßen: Sessions MÜSSEN IMMER IMMER IMMER gestartet werden, noch bevor das PHP-Skript das allererste Zeichen (auch Leerzeichen) ausgibt.

        Also weg mit deinem HTML-Headerkrams aus dem Kopf. Starte als erstes Zeichen in deiner Datei mit
        <?php

        Und danach dann mit PHP-Code, der - entsprechend deiner Anforderung - u.a. die Session startet.

        Erst danach darfst du dann mit HTML-Ausgabe beginnen.

        - Sven Rautenberg

        --
        My sssignature, my preciousssss!
        1. Hallo,

          Sven Rautenberg hats gewußt. DANKE -> *freu*
          Das war es. Der Aufruf

          session_start () muß vor den Header, dann funktioniert es.

          Noch eine kleine Frage! Ist das Loginscript soweit ok, mal abgesehen von der Prüfung des Namens und des Passwortes?
          Das soll dann via Abfrage aus der Datenbank funktionieren, und nach 3 maliger Falscheingabe des Passwortes ODER des Benutzernamens die IP für 30 min gesperrt werden.

          Würde mich über anregende Kritik, Hinweise sehr freuen.

          LG
          f34rless

          --
          ------------------
          http://rem-clan.de
          1. Hallo,

            Hi FDreiVierrless,

            Sven Rautenberg hats gewußt. DANKE -> *freu*
            Das war es. Der Aufruf

            session_start () muß vor den Header, dann funktioniert es.

            Weißt Du denn auch warum das so ist?
            .
            .
            .

            mfG der Hilker

            1. Hallo,

              session_start() erzeugt eine Session oder nimmt die aktuelle wieder auf, die auf der Session-ID basiert, die mit einer Anfrage, z.B. durch GET, POST oder ein Cookie, übermittelt wurde.

              Diese Funktion gibt immer TRUE zurück.

              Anmerkung: Bei Verwendung Cookie-basierter Sessions müssen Sie session_start() aufrufen, bevor irgend etwas an den Browser geschickt wird.

              DESWEGEN?
              LG
              f34rless

              --
              ------------------
              http://rem-clan.de
              1. Hallo,

                Hi FDreiVierrless!

                session_start() erzeugt eine Session oder nimmt die aktuelle wieder auf, die auf der Session-ID basiert, die mit einer Anfrage, z.B. durch GET, POST oder ein Cookie, übermittelt wurde.

                Diese Funktion gibt immer TRUE zurück.

                Anmerkung: Bei Verwendung Cookie-basierter Sessions müssen Sie session_start() aufrufen, bevor irgend etwas an den Browser geschickt wird.

                DESWEGEN?

                Naja - das ist eine definition - das kann man so hinnehmen :)

                LG
                f34rless

                der Hilker

                1. Hallo,
                  Danke an alle,
                  hat mir alles sehr geholfen, und ich kam zum gewünschten Ergebniss.

                  Vielen Dank

                  LG
                  f34rless

                  --
                  ------------------
                  http://rem-clan.de
              2. Hi,

                DESWEGEN?

                Ich sehe da keine Begründung.

                Begründung: Um einen Cookie zu setzen, sendet PHP eine diesbezügl. HTTP-Header-Zeile. Du kannst so einiges an HTTP-Headern senden (z.B. ein Last-Modified-Datum oder die Anzahl der kommenden Bytes oder ...). Mit dem Beginn der Ausgabe des Contents selbst, ist aber zwangsläufig der Header, nomen est omen, bereits Geschichte. Mithin kann auch kein Cookie mehr via Header gesetzt werden.

                Gruß, Cybaer

                --
                Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                1. Hallo,

                  Ich bin nun einmal kein Profi in php und gebe mir die größte Mühe das was ich lese auch zu verstehen. Dabei fällt mir das oft doch sehr schwer. Das programmieren und funktionieren, ist das eine, aber das richtige programieren, und vorallem sicher ist das andere. Ich werde mich einmal näher mit dem Thema SESSIONS auseinandersetzten. VERSPROCHEN.
                  Ich stehe leider vor meinem nächsten PROBLEM. Ich bekomme die VARIABLE

                  $_SESSION['ONLINE']

                  leider beim vermeintlichen LOGOUT nicht gelöscht. Wer ist jetzt verantwortlich wofür?

                  session_destroy () für das löschen aller registrierter Daten, d.h diese Funktion löscht nicht die VARIABLE $_SESSION['ONLINE'], oder

                  session_unset () löscht alle SESSION-VARIABLEN. Ich versteh im Moment nur noch Bahnhof.
                  Es wäre nocheinmal sehr nett von euch mir den UNTERSCHIED zu erklären.
                  Eine SESSION VARIABLE ist doch im Normalfall diese:

                  $_SESSION['ONLINE']

                  belegt mit einem Wert

                  $_SESSION['ONLINE'] = TRUE;

                  Wer löscht bei einem LOGOUT was?
                  Vielen Dank, und bitte zereißt mich jetzt nicht in der Luft. Ich wälze nebenher die php.net Dokumentation zu SESSIONS.

                  LG
                  f34rless

                  --
                  ------------------
                  http://rem-clan.de
                  1. Hi,

                    Ich werde mich einmal näher mit dem Thema SESSIONS auseinandersetzten. VERSPROCHEN.

                    Insbesondere solltest Du auch das Konzept der HTTP-Header verstehen. Das wird dir immer wieder über die Füße laufen.

                    Ich stehe leider vor meinem nächsten PROBLEM. Ich bekomme die VARIABLE
                    $_SESSION['ONLINE']
                    leider beim vermeintlichen LOGOUT nicht gelöscht. Wer ist jetzt verantwortlich wofür?

                    Du!

                    session_destroy () für das löschen aller registrierter Daten, d.h diese Funktion löscht nicht die VARIABLE $_SESSION['ONLINE'], oder

                    Korrekt.

                    session_unset () löscht alle SESSION-VARIABLEN. Ich versteh im Moment nur noch Bahnhof.

                    Nicht aber $_SESSION! Du solltest Dir das PHP-Manual zu Gemüte führen: http://php.net/session-unset

                    Hier insbesondere die Anmerkung!

                    Um eine Session komplett zu beenden mußt Du:
                    1. $_SESSION löschen (z.B.mit unset())
                    2. mit setcookie() ggf. den Session-Cookie löschen
                    3. mit session_destroy() die Session beenden

                    Das könnte also so aussehen:

                      
                     unset($_SESSION);  
                     if(isset($_COOKIE[session_name()])) {  
                      $sessionCookieParams=session_get_cookie_params();  
                      setcookie(session_name(),'',time()-42000,$sessionCookieParams['path'],$sessionCookieParams['domain']);  
                     }  
                     session_destroy();  
                    
                    

                    Gruß, Cybaer

                    --
                    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                  2. hi,

                    Ich stehe leider vor meinem nächsten PROBLEM. Ich bekomme die VARIABLE
                    $_SESSION['ONLINE']
                    leider beim vermeintlichen LOGOUT nicht gelöscht. Wer ist jetzt verantwortlich wofür?

                    Du? :-)

                    session_destroy () für das löschen aller registrierter Daten, d.h diese Funktion löscht nicht die VARIABLE $_SESSION['ONLINE'], oder

                    Nein, wie das Manual in der Beschreibung zu session_destroy() schon sagt:
                    "session_destroy() löscht alle in Verbindung mit der aktuellen Session stehenden Daten. Mit der Session zusammenhängende globale Variablen und das Session-Cookie werden nicht gelöscht."

                    D.h.: session_destroy() zerstört die "Gültigkeit" der in der Session-_Datei_ abgelegten Daten.
                    $_SESSION['xyz'] wird dadurch im aktuellen Script _nicht_ geleert.
                    Wenn du aber im _nächsten_ Script die Session wieder aufnimmst, sind die Daten _dann_ nicht mehr vorhanden - $_SESSION['xyz'], welches vorher mal in der Session vorhanden war, wird dir also _jetzt_ nach dem Aufruf von session_start() gar nicht mehr befüllt zur Verfügung gestellt.

                    session_unset () löscht alle SESSION-VARIABLEN.

                    Laut Anmerkung im Manual solltest du session_unset() bei Verwendung von $_SESSION nicht mehr verwenden:

                    "Anmerkung: Benutzen Sie bei Verwendung von $_SESSION (oder $HTTP_SESSION_VARS bei PHP 4.0.6 oder niedriger) unset() um die Registrierung einer Session-Variablen aufzuheben, d.h. unset ($_SESSION['varname']);."

                    Ich versteh im Moment nur noch Bahnhof.

                    Fahrplan jetzt verstanden? ;-)

                    gruß,
                    wahsaga

                    --
                    /voodoo.css:
                    #GeorgeWBush { position:absolute; bottom:-6ft; }
                  3. Hallo,

                    Wer löscht bei einem LOGOUT was?

                    Du solltest nicht denselben Fehler machen, wie viele Andere vor Dir!

                    Sessions haben direkt nichts mit einem "Login" zu tun. Das gibt es bei HTTP sowieso nicht, wir nennen es nur immer wieder so :-)

                    Du kannst grundsätzlich eine Session starten.
                    Das ist lediglich ein Mechanismus, der es dem Server ermöglicht, den Client mit einer relativ hohen Wahrscheinlichkeit wiederzuerkennen. Single-Cookie-Sessions sind das beliebteste Mittel.

                    Wie funktioniert das?

                    Der Client ruft eine Seite am Server zum ersten mal auf, in der session_start() drinsteht. Nun schaut PHP nach, ob der Client einen passenden (Name muss stimmen) Cookie mitgeliefert hat. Hat der Client aber nicht. Daraufhin vergibt PHP eine Session-ID, zu der es noch keine Session-Datei auf der Platte gibt. Diese sendet sie mit der Antwort dem Client.

                    Wenn der Client nun den Cookie annimmt, wird er ihn beim nächsten Mal wieder mitsenden an den Server.

                    PHP schaut also wieder nch dem Cookie und findet einen mit dem voreingestellten Session-Namen. Es schaut dann auf der Platte, ob eine passende Datei dazu vorhanden ist. Wenn ja, kann die Session fortgesetzt werden, wenn nein, würfelt PHP eine neue SID aus und legt eine leere Session-Datei an. Die Session wird also neu gesartet.

                    Wie gesagt, hat das aber nichts mit den aktuellen rechten des erkannten Benutzers zu tun. Bisher hat der sich auch noch gar nicht authentifiziert. Das macht man dann, aufsetzend auf der Session, mit einem ensprechenden Dokument (Formular) und Script. Das Script prüft die gesendeten Schlüssel (i.d.R. Paar aus Name und Passwort) und wenn diese zusammenpassen, merkt es sich das z.B. in der Session, dass der Benutzer mit der Nummer 2780664 und dem Namen "Loginpaul" sich um [TIMESTAMP] zu erkennen gegeben hat und um [TIMESTAMP] das letzte Mal einen Aufruf gemacht hat.

                    Ab nun ist der Benutzter "angemeldet". Welche Rechte er hat, sollte man bei jedem Aufruf aktuell aus der Rechtetabelle auslesen.

                    Die baut man bei atomistischem Script-System z.B. so auf, dass man für jeden User und jedes Script die Grundrechte Read, Insert, Update, Delete, Grant, festlegt und im Script dann auswerten kann.

                    Kompliziertere Verfahren sind jederzeit denkbar :-)

                    LG
                    Chris

                  4. Moin!

                    Ich stehe leider vor meinem nächsten PROBLEM. Ich bekomme die VARIABLE

                    $_SESSION['ONLINE']

                    leider beim vermeintlichen LOGOUT nicht gelöscht. Wer ist jetzt verantwortlich wofür?

                    Warum löschen?

                    Die Variable ist true, wenn die Session "online" ist. Und sie ist false, wenn man offline ist. Als dritte Möglichkeit existiert die Variable noch nicht, wenn die Session gerade erst begonnen hat.

                    Setze also die Variable auf den gewünschten Wert.

                    Ich würde jedenfalls eine Session-Variable nicht löschen, wenn es dafür nicht zwingende Gründe gibt.

                    session_destroy () für das löschen aller registrierter Daten, d.h diese Funktion löscht nicht die VARIABLE $_SESSION['ONLINE'], oder

                    session_destroy() ist nach meiner Erfahrung ziemlich überflüssig.

                    session_unset () löscht alle SESSION-VARIABLEN. Ich versteh im Moment nur noch Bahnhof.

                    session_unset() ebenso. Es gehört überdies zu der Gruppe der "verbotenen" Session-Funktionen, ebenso wie session_register() und session_is_registered().

                    Eine SESSION VARIABLE ist doch im Normalfall diese:

                    $_SESSION['ONLINE']

                    belegt mit einem Wert

                    Korrekt. Und du tust dir einen Gefallen, wenn du den Wert dieser Variablen nicht zwischendurch in andere Variablen kopierst, nur weil du Schreibarbeit sparen willst.

                    $_SESSION['ONLINE'] = TRUE;

                    Wer löscht bei einem LOGOUT was?

                    Du mußt es löschen, wenn du willst.

                    $_SESSION['ONLINE'] = false;
                    dürfte es aber doch auch tun. Muß es sogar, alles andere wäre programmtechnisch unlogisch, denn du prüfst ja doch immer
                    if ($_SESSION['ONLINE']) {
                      //code wenn eingeloggt
                    }

                    Der Block wird nur ausgeführt, wenn der Wert von $_SESSION['ONLINE'] zu true evaluiert wird. Wird er zu false evaluiert, dann eben nicht. Nichtexistente Variablen, leere Variablen (String ""), Strings mit "0" oder dem Zahlwert Null gelten als "false".

                    Alternativ: unset() löscht selektiv die angegebene Variable.

                    - Sven Rautenberg

                    --
                    My sssignature, my preciousssss!
                    1. Hi,

                      Ich würde jedenfalls eine Session-Variable nicht löschen, wenn es dafür nicht zwingende Gründe gibt.
                      session_destroy() ist nach meiner Erfahrung ziemlich überflüssig.

                      Ich würde eine Session-Variable nur dann *nicht* löschen, wenn es zwingende Gründe gäbe. ;-)

                      Warum? Ich mag es *prinzipiell* nicht, wenn nicht mehr gebrauchte, herrenlose Daten irgendwo herumlungern - und sei es in einem "sicheren" Verzeichnis.

                      Und ohne session_destroy() lungern die Restbestände (s. "Löschen von Session-Variablen") auch noch bis zum nächsten automatischen Aufräumen als Dateileichen herum und verwesen langsam. ;-)

                      Gruß, Cy-"räumt deine Mutter bis heute hinter dir her?"-baer

                      --
                      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
              3. hi,

                Anmerkung: Bei Verwendung Cookie-basierter Sessions müssen Sie session_start() aufrufen, bevor irgend etwas an den Browser geschickt wird.

                _Das_ hättest du eigentlich selber finden sollen, _bevor_ du uns die Frage wegen der Warnmeldung überhaupt stellen musst ...

                DESWEGEN?

                Wie schon gesagt: Eine _Begründung_, und damit ein Hinweis darauf, dass du auch _verstanden_ hast, warum das so ist, ist das nicht.

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
        2. Hallo,

          Also weg mit deinem HTML-Headerkrams aus dem Kopf. Starte als erstes Zeichen in deiner Datei mit
          <?php

          ... und sortiere Deine Scripte.

          Am besten übst Du das, indem Du nur eine einzige Ausgaben mit echo machst ganz am Ende Deines Scriptes. In dem ausgegeben String sollte sich dann die ganze Seite befinden, die an den Browser ausgegeben werden soll.

          Wie gesagt, erstmal nur zur Übung. Das lohnt sich aber.
          Die Scripte werden dadurch nach und nach einfach besser.

          LG
          Chris

      2. Tag f34rless.

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

        Und damit hättest du den ersten Header schon gesendet, weshalb:

        session_start ();

        zum genannten Fehler führt. Notiere es am Anfang deines Scripts (siehe auch die Anmerkung zu session_start()).

        Siechfred

  2. hast du die chmod rechte richtig eingegeben Lee und schreib rechte?

    1. hi,

      hast du die chmod rechte richtig eingegeben Lee und schreib rechte?

      Tipp: Du musst nicht auf jede Frage antworten. Und insbesondere nicht wild rumraten, wenn du nicht weißt, wo das Problem liegen könnte.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Moin!

        hast du die chmod rechte richtig eingegeben Lee und schreib rechte?

        Tipp: Du musst nicht auf jede Frage antworten. Und insbesondere nicht wild rumraten, wenn du nicht weißt, wo das Problem liegen könnte.

        Weiterer Tipp: Angegebene Fehlermeldungen enthalten oftmals deutliche Hinweise, wo das Problem liegen könnte. Lesen - verstehen - Gegenmaßnahmen einleiten.

        - Sven Rautenberg

        --
        My sssignature, my preciousssss!
  3. Hallo,

    Hallo FDreiVierrless!

    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Programme\xampp\htdocs\pcs\login.php:9) in C:\Programme\xampp\htdocs\pcs\login.php on line 13

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Programme\xampp\htdocs\pcs\login.php:9) in C:\Programme\xampp\htdocs\pcs\login.php on line 13

    wieso sollte dein apache nicht richitg konfiguriert sein?
    also ich bin jetzt nich der PHP-Freak, aber ich lese da:
    "headers already sent by", offenbar versuchst du mehr als einen http-header zu senden.. fraglich finde ich, wieso der 2. nicht als text ausgegeben wird, sollte es denn so sein, aber ich halte es für möglich dass du das login.php aus einem anderen script includierst, welches schonmal einen header geschickt hat...

    Öhhmmmmmm, jetzt bin ich div. Seiten auf www.php.net durchgegangen, aber irgendwie werd ich das Gefühl nicht los, das mein Apache lokal irgendwie nicht richtig konfiguriert ist.
    Hier mal der Code, vielleicht bin ich auch nur zu blöd. Ich poste euch einmal die login.php.

    ....
    Code

    LG
    f34rless

  4. echo $begrüßung;

    Du fragtest nach Fehlern und Verbesserungsmöglichkeiten.

    <input name="SUBMIT_LOGIN" type="submit" value="ANMELDEN">

    Wenn ein Formular per Enter abgesendet wird, senden manche Browser den ersten Submit-Button, den sie finden. Andere tun dies nicht. (Wenn das Element nicht aktiviert wurde, sollte auch nicht so getan werden als ob.) Du kannst dieses Verhalten mit den beiden meist verwendeten Browsertypen nachvollziehen.

    if (isset ($_POST['SUBMIT_LOGIN'])){

    Diese Abfrage liefert also nur manchmal etwas.

    if ($_POST['USERNAME'] == $name && $_POST['PASSWORD'] == $pass){

    Auch hier wäre eine Abfrage mit isset() vor dem lesenden Zugriff günstig, um Notice-Meldungen zu vermeiden. (Bitte beim Script-Entwickeln das error_reporting auf E_ALL setzen, damit diese hilfreichen Meldungen nicht unterdrückt werden.)

    echo "<a href="login.php?logout">LOGOUT</a>";
    if ($_GET['LOGOUT']){

    Bei einem Test sollte dir auffallen, dass das Logout nicht funktioniert. Eben erwähntes E_ALL im error_reporting sagt dir auch, dass es zum einen $_GET['LOGOUT'] nicht gibt (Groß-/Kleinschreibung beachten und außerdem isset() verwenden) und zum anderen wird diese Abfrage immer als false ausgewertet, da "logout" mit Leerstring als Wert in $_GET abgelegt wird. Mit isset($_GET['logout']) kannst du testen, ob der Schlüssel 'logout' in $_GET enthalten ist und damit ob ein Logout gewünscht wurde.

    echo "$verabschiedung $name";