PHP Cannot send session cookie

Shampoo

~ Hello Nina ~
28 Dezember 2007
1.456
142
Hallo Community,

aus irgendeinem Grund will meine Session nichtmehr funktionieren.

Hier die ersten Zeilen des Files.

PHP:
<?
session_start();

	if($_POST['login']){
	
		if($_POST['passwort'] == "beispiel"){
			
			$_SESSION['zugang'] = "true";
	

		}else{
		
			$message = "Passwort falsch!";
		
		}
		
	}
	
?>

Der Fehler

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /var/www/web43/html/dokumentationen/index.php:1) in /var/www/web43/html/dokumentationen/index.php on line 2

 
Leerzeichen vor <??

Der Fehler kommt nur wenn vor SESSION_START() bereits eine Ausgabe erfolgt ist.

edit: ups überlesen :oops: dann evtl. irgendein Steuerzeichen o.ä. davor. Lösch mal die ganze Zeile mit <? und schreibe sie neu.

Haben Sie aber penibel alle Ausgaben vor der Funktion header() eliminiert und die Fehlermeldung tritt trotzdem auf, kann der Grund auch sein, dass die Skript-Datei versehentlich im Unicode-Format abgespeichert wurde. Denn hierbei kommt vor dem ersten "echten" Zeichen die Bytefolge "FF FE", die PHP als Ausgabe interpretiert und deshalb die Warnung produziert.

Um sicherzugehen, dass ihr Programm nicht im Unicode-Format abgespeichert wurde, prüfen Sie in Ihrem Editor den Typ des Dokuments oder schalten in die Hex-Ansicht um. Dabei ist das Unicode-Format leicht an den beiden Startbytes und der Aufteilung jedes Zeichens auf zwei Bytes zu erkennen.

Quelle: https://www.tippscout.de/php-fehlermeldung-headers-already-sent_tipp_3136.html

mfg

Chris
 
Leerzeichen vor <??

Der Fehler kommt nur wenn vor SESSION_START() bereits eine Ausgabe erfolgt ist.

edit: ups überlesen :oops: dann evtl. irgendein Steuerzeichen o.ä. davor. Lösch mal die ganze Zeile mit <? und schreibe sie neu.

mfg

Chris

Leider passiert nichts, es hat ja auch vorher funktioniert, habe ja nichts geändert. :-(
 
Vor session_start(); befindet sich jedoch nichts bis auf <?, nicht einmal ein Leerzeichen.

In Zeile eins wird etwas gesendet, dieses Zeichen siehst du vielleicht in deinem Editor nicht. Probiere mal einen anderen Editor (Notepad++ ?) bzw. stelle die Zeichenkodierung um - irgendwie solltest du dir das Zeichen anzeigen lassen können.

Hatte so etwas auch schon, ist manchmal sehr merkwürdig, das Zeichen tauchte ganz plötzlich auf, obwohl ich nichts geändert hatte.
 
Zuletzt bearbeitet:
oder die einfachste Möglichkeit:

Datei öffnen - alles markieren - Neuen Texteditor öffnen - alles einfügen - Datei neu abspeichern

normalerweise sollte der Editor nur das kopieren was er auch sieht ;)

mfg

Chris
 
Also irgendwie hat es funktioniert, muss ich nochmal erforschen wie sowas passieren konnte. Dankeschön. :mrgreen:
 
Es kann helfen, mal mit dem Hex-Editor auf die Textdatei loszugehen. Der zeigt sicher jedes Zeichen, was sich vor dem <? versteckt.

P.S. Gewöhn dir besser an, <?php korrekt auszuschreiben.
 
[...]muss ich nochmal erforschen wie sowas passieren konnte[...]

Hast du vllt UTF-8 benutzt?
Es gibt 2 Arten von UTF-8 Codierungen.
1. ganz Normal
2. die Nachricht/der Text beginnt mit einem - unsichtbaren - Steuerzeichen(BOM) (um auf die Benutzung von UTF-8 hinzudeuten)

Solltest du 2. benutzt haben, dann einfach auf 1. umstellen und es sollte gehen.
 
Zuletzt bearbeitet:
P.S. Gewöhn dir besser an, <?php korrekt auszuschreiben.

Das war bei mir mal ein Problem!
Zack neues XAMPP drauf, hatte alles mit <? angefangen, schon ging gar nichts mehr und ich hab mich ewig geplagt, bis ich das herausgefunden habe, dass das <? nicht akzeptiert wird.
Wie theHacker schon sagt, <?php ist die bessere Variante!
 
Das war bei mir mal ein Problem!
Zack neues XAMPP drauf, hatte alles mit <? angefangen, schon ging gar nichts mehr und ich hab mich ewig geplagt, bis ich das herausgefunden habe, dass das <? nicht akzeptiert wird.
Wie theHacker schon sagt, <?php ist die bessere Variante!

Dafür gibs in der php.ini eine Zeile in der man an-/ausschalten kann, ob die kurze (<?) oder lange (<?php) Version als strict geparst werden soll.

Hätte die Einstellung auch getan, ohne alles per Hand umzuarbeiten.
Allerdings ist die nun übliche/standardisierte Version die - <?php