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

function.session-start cannot send session cookie/cache

Gokar

Neues Mitglied
Hallo Community,

ja, ich habe ein Problem. Basierend auf diesen Fehlermeldungen:

warning session_start() function.session-start cannot send session cookie headers already sent by [..]
warning session_start() function.session-start cannot send session cache limiter headers already sent by [..]


Zunächst eine Information zur Umgebung:

  • Normalerweise programmiere ich Zuhause oder auf der Arbeit --> dort gab es nie einen Fehler dieser Art
  • Wenn ich das Projekt auf den Berufschul-Laptops öffne --> tritt der Fehler auf; macht den Login natürlich unmöglich

Zur Fehlermeldung "headers already sent by [..]":

  • sie lässt ja drauf schließen, dass bereits eine Ausgabe erfolgt ist bevor "session_start()" ausgeführt wird
  • der Befehl allerdings kommt sofort i.d. zweiten Zeile der Datei (nach dem "<?php"-Tag)
  • mit einem HEX-Editor betrachtet, konnten sich keine zuvor 'unsichtbaren' Zeichen finden lassen

Gerne würde ich dieses Problem natürlich beheben, aber ich möchte Euch hier vor allem fragen, ob ihr irgendeine Idee oder Erfahrungswerte habt, wieso dieser Fehler an einem Rechner A auftritt, an einem Rechner B, C und D aber nicht?

Im Kern dachte ich, ich wüsste im Grunde, was zum Auftritt der Meldung führt, da muss aber ja noch viel mehr dahinter stecken. Vielleicht teilt jemand sein Wissen mit mir :)


Danke & viele liebe Grüße,

Gokar
 
Hallo Gokar,

1. Öffne die Datei im Windows Texteditor. Gehe auf Datei->Speichern Unter und wähle den Dateityp "ANSII" aus und wenn nötig, überschreibe vorhandene Daten.
F5 ( oder STRG+F5 ) im Browser und die Fehlermeldung sollte weg sein,.. außer Fall 2. trifft zu.

2. Wird die Datei eventuell von einer anderen Datei "included" ?

Gruß
 
Hallo zorndyuke,

habe momentan zwar ein Problem: nämlich, dass die Berufschule nur ein mal wöchentlich, montags, bei uns stattfindet und kann deshalb leider im Moment nicht groß testen. Wie gesagt, auf den anderen PC's, die ich benutze taucht dieser Fehler nicht auf.

Wir haben gestern allerdings die Kodierung von UTF-8 schon mal auf ANSII geändert, das hat funktioniert. Die Meldung war weg.

Vielleicht ist das ein Irrglaube meinerseits, aber mir wurde vermittelt UTF-8 sei die Form, die im Internet benutzt werden soll. Kann auch dauerhaft auf ANSII zurückgegriffen werden oder hat das Nachteile (ggf. auch Vorteile)?


Included wird die Datei nicht. Grundgerüst ist im Groben:
  • eine index.php-Datei (hier findet session_start() statt)
  • mehrere in der Index-Datei includete .php-Dateien, darunter auch die login.php dann eben

Eine Frage hätte ich dann noch dazu.
Meine index.php wird ohne das Tag "<!doctype html>" nicht korrekt dargestellt, eigentlich schief und schräg, dass sich die Balken biegen. Dies ist auch der Fall wenn das Tag irgendwo anders steht, als zu Beginn der Seite. Folglich würde ich es gerne an den Anfang schieben, also noch vor das php-Coding. Behindert das auch das Starten der Session?
 
An sich werden die normalerweise immer in ANSII erstellt bzw. in einem Format welches normal funktioniert. In UTF-8 werden jedoch manche Steuerzeichen Intern anders dargestellt, als PHP Sie erwartet. Da kann ein Leerzeichen zwar für den User Sichtbar ein Leerzeichen sein, jedoch Intern nicht das Leerzeichen sein, dass PHP sogesehen "erlaubt".

Session_start erfordert, dass keine Ausgaben vorhanden sein dürfen, selbst gibt es auch nichts aus was im Quellcode dann sichtbar wäre.
Ich hatte zwar noch nie den Fall, dass meine Webseite anders aussah, nur weil ich den Doctyp nicht angegeben habe, denn normalerweise Funktioniert HTML auch ohne sämtliche Grundgerüste ( <head><title>.. usw. )

Es kann sein, dass sich HTML5 da anders verhält, aufjedenfall wenn du das benutzen willst, kannst du das tun, nur halt NACH dem session_start, z.B.:

PHP:
<?php
   session_start();
   include( 'functions.php' );
   include( 'constans.php' );
?>
<!DOCTYPE html>
<html>
   <head>
       <title><?=$Title;?></title>
    <?php include( 'javascripts.php' );?>
   </head>
 <body>
..
..

Das wäre halt nur als Beispiel. Manche Funktionen sind halt darauf aus, die HEADER Daten zu verändern und diese können nicht gleichzeitig verändert werden, wenn bereits Text ausgegeben wird.

Das könnte man durch Output-Buffer realisieren oder wenn man sich einfach an das EVA-Prinzip hält, darüber könntest du dich ja mal informieren.
 
Okay, vielen Dank.

Habe das "<!doctype>" jetzt nach dem "session_start()" geregelt, die Seite wird sauber angezeigt soweit.
Werde dann mal meine Dateien in ANSII umkodieren und mich dann mal kundig machen was Output-Buffer und das EVA-Prinzip beinhalten.

Mal schauen, ob nächsten Montag alles so angezeigt wird, wie es soll.


Grüße ;)
 
Dass der Fehler sonst nicht angezeigt wird, liegt wohl an den PHP-Einstellungen in der php.ini.
PHP:
error_reporting(-1);
ini_set('display_errors', 1);
sollten dir die Fehleranzeige einschalten. Im Produktiveinsatz ist es dann üblich, Fehlermeldungen zu unterdrücken.
 
Ok. Klingt gut.

Hier bin ich ja richtig oder: "xampp\php\php.ini"

Füge ich die Einstellungen einfach unten mit ein? Habe beim Durchsuchen der Datei keine bisher vorhandenen Parameter dieser Art gefunden.


Nachtrag: Bekomme (nach dem XAMPP Neustart) einen Syntax-Error wegen der php.ini wenn ich die Zeilen in die Datei nachtrage...
 
Zuletzt bearbeitet:
Die Codezeilen von Sysop kommen in dein PHP Code rein.

Wenn du das Global Einstellen willst, dann ist die php.ini zwar richtig, jedoch wird das da etwas anders eingestellt, google mal. ( Google->php.ini error reporting )
 
Nein, die Codezeilen schreibst du direkt in dein Script und schaltest für das Script die Fehleranzeige ein.

Oder du suchst in der php.ini den Eintrag error_reporting und setzt den z.B. auf
Code:
E_ALL & ~E_NOTICE
 
Zurück
Oben