• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Cannot modify header information - headers already sent by

freakXHTML

Mitglied
Hallo zusammen,
ich habe folgende Methode einer Klasse:

PHP:
public function logout()
  {
   session_start();
   $_SESSION['logged'] = FALSE; //zur Sicherheit
   session_destroy();
   setcookie("username",$this->Username,time()-(3600*24)); //Löschung der Cookies
   setcookie("password",$this->Password,time()-(3600*24));     
  }

In einer anderen Methode wurden die Cookies gesetzt, die ich hier nun wieder entfernen möchte. Jedoch kommt beim Ausführen die Warnung, die ihr im Titel dieses Threads findet. Ich habe jedoch in der ganzen php keinen "header()" Befehl. Dies sei eine Ursache laut Google. Es muss was mit den Cookies zu tun haben.

Wisst ihr, was ich machen muss?

edit: Durch einen alten Thread habe ich erfahren, dass ob_start() hilft. Doch warum? Dadurch wird irgendein Puffer aktiviert, doch was bringt das?

Vielen Dank
lg, freakXHTML
 
Zuletzt bearbeitet:
Das Problem ist session_start(), dieses gehört ganz an den Anfang deines Scripts. Wird in der Fehlermeldung nicht session_start() erwähnt?
 
Nein, session_start() kommt nicht vor. Ich denke auch nicht, dass es darin liegt. Die Funktion ist eine Methode einer Klasse und session_start() muss in jeder Methode neu gestartet werden. Sonst funktioniert das Script nicht bei mir. Es liegt definitv an den Cookies. Sobald ich diese kommentiere, kommt die Warnung nicht mehr.

lg, freakXHTML
 
Die Fehlermeldung kommt, wenn du versuchst Cookies zu senden, aber bereits HTML Code ausgegeben wurde. Cookies werden im http-header verschickt, wenn dieser ausgegeben wurde, ist es vorbei mit Cookies.
 
Die Ursache für diese Fehlermeldung ist eigentlich immer die Selbe. Irgendwo findet bereits eine Ausgabe statt, bevor der bemängelte header() gesendet wird.

Die Funktion ist eine Methode einer Klasse und session_start() muss in jeder Methode neu gestartet werden. Sonst funktioniert das Script nicht bei mir.
Das ist falsch! Ein einziger Aufruf am Scriptanfang reicht aus.
Ab PHP 4.3.3 resultiert der Aufruf von session_start() nachdem die Session vorher gestartet wurde in einem Fehler der Stufe E_NOTICE. Der zweite Start der Session wird in diesem Fall einfach ignoriert.

Siehe: PHP: session_start - Manual .

Und wie struppi schon sagte:
setcookie() definiert ein mit den HTTP Header-Informationen zu übertragendes Cookie. Wie andere Header auch, müssen Cookies vor jeglicher Ausgabe Ihres Skriptes gesendet werden (dies ist eine Einschränkung des Protokolls). Das bedeutet, dass Sie diese Funktion aufrufen müssen, bevor Sie eine Ausgabe, dazu zählen auch <html>- oder <head>-Tags sowie jede Art von Whitespaces, übermitteln.

Das kann man auch alles im Handbuch nachlesen: PHP: setcookie - Manual .

Gruß
 
Zurück
Oben