Login - Headers already sent?

Kracky

Mitglied
Hallo,

ich habe folgendes Problem:

Ich habe ein Login Script geschrieben welches auch 2 Cookies setzen kann - sofern man den haken dafür setzt.

Auf meinem PC (localhost) funktioniert auch alles einwandfrei.

Wenn ich mich einlogge dann setzt er die Cookies und wenn ich auslogge dann löscht er diese wieder.

Jetzt habe ich das ganze zum testen mal auf meinen Webspace (alfahosting) hochgeladen.

Dort kriege ich jetzt allerdings jedesmal die Fehlermeldung "Headers already sent"

Normal kriegt man doch diese Fehlermeldung wenn vor dem Cookie schon eine Ausgabe erfolg ist oder liege ich da falsch?

Die ganze Login überprüfung habe ich allerdings in eine extra Datei (login.php) geschrieben so das eigentlich keine vorherige Ausgabe erfolgen kann außer natürlich durch include da das Script ja mit Include in die Index.php eingebunden ist.

Etwas anderes würde aber auch garkeinen Sinn machen. Ich kann ja schlecht den Login immer an erster Stelle platzieren.

Wieso also funktioniert es auf meinem PC auf dem Webspace aber nicht mehr?

Hier mal der Code wie er gerade aussieht:

login.php
PHP:
<?php
$username = $_POST['username'];
$password = md5($_POST['password']);

$auslesen = "SELECT username, password FROM login WHERE username LIKE '$username' LIMIT 1";
$ergebnis = mysql_query($auslesen);
$row = mysql_fetch_object($ergebnis);

if($username == "" OR $password == "") {
	echo "Bitte Benutzernamen und Passwort eingeben.";
} else {
	if($row->password == $password) {
		if(isset($_POST['rememberMe'])) {
			$expire = time() + 3600 * 24 * 30; // Verfallsdatum 30 Tage
	
			setcookie("rememberMe", base64_encode($username), $expire); // Erster Cookie wird gesetzt
	
			$salt = "irgendeinwert";
			$hash = md5($salt."|".$password."|".$username);
	
			setcookie("rememberMeToken", $hash, $expire); // Zweiter Cookie wird gesetzt
		} else {
			$_SESSION['username'] = $username;
		}
		echo "Login erfolgreich.";
		echo "<br>Weiterleitung in 3 Sekunden";
		echo "<meta http-equiv=\"refresh\" content=\"3; URL=?page=Home\">";
	} else {
		echo "Benutzername oder Passwort falsch.";
	}
}
?>

logout.php
PHP:
<?php
if(!isset($_SESSION['username'])) {
	echo "Du bist nicht angemeldet.";
} else {
	setcookie("rememberMe", '', time() -3600 * 24 * 30);
	setcookie("rememberMeToken", '', time() -3600 * 24 * 30);
	session_destroy();
	echo "Erfolgreich abgemeldet.";
	echo "<br>Weiterleitung in 3 Sekunden";
	echo "<meta http-equiv=\"refresh\" content=\"3; URL=?page=Home\">";
}
?>

und das ganze wie folgt in der index.php verbaut:
PHP:
<?php
			if(!isset($_SESSION['username'])) {
            	include("bin/script/ucp/login/formular.php");
			} else {
				include("bin/script/ucp/logout.php");
			}
			?>

Das Logout lass ich mal aussen vor den dazu kommt es ja nichtmal. Er loggt sich nichtmal ein ^^ Es sind auch keine Cookies auf meinem PC gespeichert er setzt sie erst garnicht.

Warning: Cannot modify header information - headers already sent by (output started at /var/www/web745/html/index.php:19) in /var/www/web745/html/bin/script/ucp/login/login.php on line 16

Warning: Cannot modify header information - headers already sent by (output started at /var/www/web745/html/index.php:19) in /var/www/web745/html/bin/script/ucp/login/login.php on line 21
Login erfolgreich.
Weiterleitung in 3 Sekunden
 
Hi,

schau mal in die index.php, Zeile 19. Da wird schon eine HTML-Ausgabe an den Browser gesendet. Somit kann er in der login.php in Zeile 16 und 21 dann keinen Cookie mehr setzen.

Grüße,
BK
 
In Zeile 19 wird das erste DIV gesetzt. Natürlich ist es HTML ^^ Jetzt frage ich mich aber wie ich das Login an die Position kriegen soll wo es auch hinsoll ohne vorher HTML benutzt zu haben :o

und warum funktioniert es auf meinem PC, auf dem Webspace aber nicht? :/
 
Naja, du kannst ja auch zuerst alles HTML in eine Variable speichern und diese, sobald das Script vollständig ausgeführt wurde, ausgeben.
 
Oo ... O_O'
ähm okay. xD wie mache ich es denn dann das der php code zwischen den DIVs ausgeführt wird?
Wenn alles in Variablen gespeichert ist dann muss ja quasi erst die Variable kommen dann das Script und dann die nächste Variable.
Aber da die Variable ja davor ist wird ja rein theoretisch doch wieder zuerst HTML ausgeführt oder?
 
Hi,

hierfür gibt es die Funktionen ob_start() und ob_end_flush().

Beispiel:
PHP:
<?php
ob_start(); // ausgaben puffern / verhindern

echo "dies ist eine ausgabe.\n";

session_start(); // darf nur aufgerufen werden, wenn noch keine ausgabe war. Würde jetzt einen fehler werfen ohne dem ob_start()

echo "test";

ob_end_flush(); // schickt alle bisherigen ausgaben gebündelt an den browser.
?>

Grüße,
BK
 

Neue Beiträge

Zurück