Sigge: Session (Fehlermeldung)

Hallo ich versuche mich das erste Mal an sessions.
Habe die diversen Beispiele im web durchprobiert (ging auch).
Mein Versuch mit selbstgemachtem aber scheitert mit der Fehlermeldung:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at G:\Internet\xampplite\htdocs\dietrolle.de\session\index.php:1) in G:\Internet\xampplite\htdocs\dietrolle.de\session\login.php on line 3
Da zu dem meine Englischkenntnisse gegen Nill gehen hilft mir das nicht weiter.

Hier mein Code (oberster Eintrag auf der Seite):
<?php
session_start();
$name = $_POST['username'];
$code = $_POST['passwort'];

$_SESSION['username'] = $name;
 if (isset($name) && $code !=""){
include ('cgi-bin/passwort.txt');
if (($pass[$name] != "") && ($pass[$name] == $code)){
echo ("
<div id='log'>
<h3 class='gruen'><br>Sie sind eingeloggt mit dem Namen: <font color='black'>- $name -</font>
<br>und k&ouml;nnen jetzt den gesch&uumltzten Mitglieds-Bereich betreten</h3>
<p>&nbsp;</p>
<div id='taste'>
<p class='vit'><a class='taste' href='cgi-bin/intern.php' title='Gesch&uuml;tzten Bereich betreten'>weiter</a>
</div>
</div>
");
}else{
echo ("
<div id='log'>
<div id='zu'><p><a href='index_session.php'>&nbsp;<img src='bat/zu.png' width='23' height='21' border=0 align='right'></a></p>
                                 </div>
<h1 class='rot'>Bei der Eingabe wurde ein Fehler gemacht</h1>
<h3 class='mit'><br>überprüfen Sie noch einmal die Schreibweise von Name und Kennwort
<br>sollten Sie ihr Kennwort vergessen haben,
<br>wenden Sie sich bitte an den Administrator (kontakt)</h3>
</div>
");
}
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head> usw.
css-Datei ist ausgelagert.
Die Passwortabfrage funktioniert nur eben das mit der Session nicht.
Würde mich über eure Hilfe riesig freuen.

  1. Moin,

    Mein Versuch mit selbstgemachtem aber scheitert mit der Fehlermeldung:
    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at G:\Internet\xampplite\htdocs\dietrolle.de\session\index.php:1) in G:\Internet\xampplite\htdocs\dietrolle.de\session\login.php on line 3

    Das bedeutet im Allgemeinen, du gibst schon etwas aus, bevor du session_start() aufrufst. Ich gehe mal davon aus, dass du diese Datei irgendwo per include() einbindest. Du solltest den Start der Session ganz an den Anfang der Datei schreiben, die wirklich aufgerufen wird.

    Grüße Marco

    1. Hallo,

      Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at G:\Internet\xampplite\htdocs\dietrolle.de\session\index.php:1) in G:\Internet\xampplite\htdocs\dietrolle.de\session\login.php on line 3
      Das bedeutet im Allgemeinen, du gibst schon etwas aus, bevor du session_start() aufrufst.

      richtig, und sei es auch nur eine Leerzeile oder eine UTF-8-BOM.

      Ich gehe mal davon aus, dass du diese Datei irgendwo per include() einbindest.

      Unwahrscheinlich, da die Ausgabe unter dem PHP-Teil mit dem DOCTYPE beginnt und vermutlich ein vollständiges HTML-Dokument erzeugt. Ich habe eher eine Leerzeile am Dateianfang im Verdacht, obwohl die Angabe "on line 3" mich verunsichert.

      Abgesehen davon ist es sehr eigenartig und sieht für mich falsch aus, am Dokumentanfang per PHP die eigentliche Ausgabe mit einem div-Element zu beginnen, und danach erst den DOCTYPE, das head-Element und weiteren HTML-Code folgen zu lassen. Von anderem Unfug wie dem unnötigen Umkopieren von Variablenwerten, dem Verstümmeln von Umlauten oder dem Erzeugen von Abständen mit Absätzen, die nur ein &nbsp; enthalten, wollen wir gar nicht reden.

      Ciao,
       Martin

      --
      Rizinus hat sich angeblich als sehr gutes Mittel gegen Husten bewährt.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. Das bedeutet im Allgemeinen, du gibst schon etwas aus, bevor du session_start() aufrufst.

        richtig, und sei es auch nur eine Leerzeile oder eine UTF-8-BOM.

        Keine Leerzeichen und "absolut am Anfang" der Datei, die aufgerufen wird und nicht per include eingefügt!

        1. Tach!

          Das bedeutet im Allgemeinen, du gibst schon etwas aus, bevor du session_start() aufrufst.
          richtig, und sei es auch nur eine Leerzeile oder eine UTF-8-BOM.
          Keine Leerzeichen und "absolut am Anfang" der Datei, die aufgerufen wird und nicht per include eingefügt!

          Könntest du bitte in ganzen Sätzen sprechen, so dass man verstehen kann, was du meinst?

          Der Fehler ist schon so oft nachgefragt und beantwortet worden. Die Ursache ist immer dieselbe: Es wurde vor dem session_start() bereits irgendetwas ausgegeben. Das musst du finden, wozu dir der Text "output started at ..." einen Hinweis auf die ursächliche Stelle gibt. Wenn du in der ersten Zeile vor dem <?php nichts siehst, dann verschweigt dir dein Editor etwas. Nimm einen anderen Editor und/oder achte beim Speichern darauf, dass ohne BOM gespeichert wird, wenn du UTF-8 verwendest.

          Achja, und wenn du schon UTF-8 verwendest, dann schreib richtige Umlaute in denen Code und keine Entitys. (Auch bei ISO-8859-1 braucht man dafür keine Umschreibungen.)

          dedlfix.

          1. Der Fehler ist schon so oft nachgefragt und beantwortet worden. Die Ursache ist immer dieselbe: Es wurde vor dem session_start() bereits irgendetwas ausgegeben. Das musst du finden, wozu dir der Text "output started at ..." einen Hinweis auf die ursächliche Stelle gibt. Wenn du in der ersten Zeile vor dem <?php nichts siehst, dann verschweigt dir dein Editor etwas. Nimm einen anderen Editor und/oder achte beim Speichern darauf, dass ohne BOM gespeichert wird, wenn du UTF-8 verwendest.

            Ich habe den Inhalt meiner Datei (start_session();) bis auf die ersten 6 Zeilen gelöscht und durch den einer Session-Beispiel-Datei ersetzt. Diese Datei funktioniert einwandfrei. Demnach gibt es keine versteckten Zeichen in den ersten Zeilen:

            <?php
            session_start();
            $name = $_POST['username'];
            $code = $_POST['passwort'];

            $_SESSION['username'] = $name;
            demnach muß ich in den nachfolgenden Zeilen einen Fehler in Zeile 3 provozieren. nur ich habe leider keine Ahnung welchen!

            if (isset($name) && $code !=""){
            include ('cgi-bin/passwort.txt');
            if (($pass[$name] != "") && ($pass[$name] == $code)){
            login(true);
            }else{
            login(false);
            }
            }
            ?>

            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                   "http://www.w3.org/TR/html4/loose.dtd">
            <html>

            <head>...usw.

            DIESER AUFRUF DER FUNCTION LÄUFT EINWANDFREI:

            <?php
            function login($okay){
            if ($okay == true){
            echo ("
            <div id='log'>
            <h3 class='gruen'><br>Sie sind eingeloggt mit dem Namen: <font color='black'>- $name -</font>
            <br>und k&ouml;nnen jetzt den gesch&uumltzten Mitglieds-Bereich betreten</h3>
            <p>&nbsp;</p>
            <div id='taste'>
            <p class='vit'><a class='taste' href='cgi-bin/intern.php' title='Gesch&uuml;tzten Bereich betreten'>weiter</a>
            </div>
            </div>
            ");
            }else{
            echo ("
            <div id='log'>
            <div id='zu'><p><a href='index_session.php'>&nbsp;<img src='bat/zu.png' width='23' height='21' border=0 align='right'></a></p>
                                             </div>
            <h1 class='rot'>Bei der Eingabe wurde ein Fehler gemacht</h1>
            <h3 class='mit'><br>überprüfen Sie noch einmal die Schreibweise von Name und Kennwort
            <br>sollten Sie ihr Kennwort vergessen haben,
            <br>wenden Sie sich bitte an den Administrator (kontakt)</h3>
            </div>
            ");
            }
            }
            ?>

            1. Tach!

              Ich habe den Inhalt meiner Datei (start_session();) bis auf die ersten 6 Zeilen gelöscht und durch den einer Session-Beispiel-Datei ersetzt. Diese Datei funktioniert einwandfrei. Demnach gibt es keine versteckten Zeichen in den ersten Zeilen:

              Die Fehlermeldung

              Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at G:\Internet\xampplite\htdocs\dietrolle.de\session\index.php:1) in G:\Internet\xampplite\htdocs\dietrolle.de\session\login.php on line 3

              ist so zu verstehen, dass das session_start(), welches in Zeile 3 der login.php steht, bemerkt hat, dass die Ausgabe bereits begonnen hat. Und die Stelle, an der die Ausgabe begonnen hat, hat sich PHP auch gemerkt, das war Zeile 1 der index.php.

              Schau dir also an, wer da was wie aufruft und dass da nichts vorher ausgegeben wird oder außerhalb von <?php ?> steht.

              dedlfix.

              1. Schau dir also an, wer da was wie aufruft und dass da nichts vorher ausgegeben wird oder außerhalb von <?php ?> steht.

                dedlfix.

                Ich weiß selber nicht wieso, aber es funktioniert jetzt, ggf habe ich nicht darauf geachtet wie ich was speichere?!

                Beim speichern mit Codierung: ANSI funktioniert es jetzt.

                Auf jeden Fall: "Danke für euren Einsatz!"

                1. Tach!

                  Beim speichern mit Codierung: ANSI funktioniert es jetzt.

                  Entnehme ich daraus, dass du den Windows-Notepad verwendest? Der speichert bei UTF8 generell mit BOM. Damit (und ansonsten auch) ist er nicht besonders brauchbar. Als Alternative bietet sich Notepad++ an, der kann mit und ohne BOM speichern.

                  dedlfix.

                  1. Entnehme ich daraus, dass du den Windows-Notepad verwendest? Der speichert bei UTF8 generell mit BOM. Damit (und ansonsten auch) ist er nicht besonders brauchbar. Als Alternative bietet sich Notepad++ an, der kann mit und ohne BOM speichern.

                    Genau den habe ich benutzt, aber jetzt weiß ich ja worauf ich achten muss.
                    Nochmals vielen Dank (auch für die Gedult)

                    :-)
                    Sigge

                2. Hallo,

                  Ich weiß selber nicht wieso, aber es funktioniert jetzt, ggf habe ich nicht darauf geachtet wie ich was speichere?!
                  Beim speichern mit Codierung: ANSI funktioniert es jetzt.

                  und ich sach's noch, möglicherweise eine BOM. Aber auf mich hört ja keiner ... ;-)

                  Ciao,
                   Martin

                  --
                  Dem Philosoph ist nichts zu doof.
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(