PHP session_start(); Fehler

PEASANT KING

Commander
Registriert
Okt. 2008
Beiträge
2.412
Hallo liebe CB'ler,

Ich habe ein kleines Login Script geschrieben, nun ist das Problem das ich bekomme wenn ich auf die interne Seite komme folgendes:

Warning
: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\LLServer\main.php:5) in C:\xampp\htdocs\LLServer\checkuser.php on line 2

Ich weiß wann der Fehler auftritt, z.B wenn ich session_start nicht an den Anfang der PHP schreibe oder wegen BOM.
Nun ich habe das Script mit Notepad ++ geschrieben und das Format ist auf ANSI, also sollte doch BOM nicht aktiviert sein nehme ich mal an.

Hier mal der Code:

main.php:

PHP:
<?php
    $verzeichnis = openDir("."); // Zeigt das Verzeichnis an"
        while ($file = readDir($verzeichnis)) { // Verzeichnis lesen
        if ($file != "." && $file != "..") { // Höhere Verzeichnisse nicht anzeigen!
        echo "<a href=\"$file\">$file</a><br>\n"; // Link erstellen
        }
    }
    closeDir($verzeichnis); // Verzeichnis schließen
?>

<link rel="stylesheet" href="design/main.css" type="text/css" />
<?php 
include ("checkuser.php"); 
?> 
<html> 
<head> 
  <title>L.L. Entertainment System Interface [LLESI]</title> 
</head> 
<body> 
  BenutzerId: <?php echo $_SESSION["user_id"]; ?><br> 
  Nickname: <?php echo $_SESSION["user_nickname"]; ?><br> 
  Nachname: <?php echo $_SESSION["user_nachname"]; ?><br> 
  Vorname: <?php echo $_SESSION["user_vorname"]; ?> 
  <hr> 
  <a href="logout.php">Ausloggen</a> 
</body> 
</html>

und hier die includete checkuser.php

PHP:
<?php 
session_start(); 
if (!isset ($_SESSION["user_id"])) 
{ 
  header ("Location: formular.php"); 
} 
?>

Danke für eure Hilfe vorab
 
Du hast dir die antwort schon quasi selber gegeben. Du startest eine session obwohl vorher schon informationen an den browser gesendet werden, wie zb. das <link> ... oder das echo ganz oben in der main.php.

Das include verhällt sich so als ob sich der quellcode der includeten datei an der stelle stehen würde.
 
Ach lol ja dankeschön :)
 
Wenn du die Reihenfolge des include nicht verändern möchtest hilft es auch, wenn du die ganze Seite pufferst.

Dazu musst du als aller erstes oben folgende PHP-Funktion aufrufen:
PHP:
ob_start();

Und genauso ganz am Ende;
PHP:
ob_end_flush();
 
Halte ich für "frickel" lösung. Ich bin der meinung das man auch bei PHP nach dem E-V-A prinzip arbeiten sollte. Und da brauch man diese 2 anwendungen nicht ;)
 
Zurück
Oben