Verteiler - Session-problem

  • PHP

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Verteiler - Session-problem

    Hallo,
    ich habe in PHP einen Verteiler geschrieben, in den man sich ein- und austragen kann. Außerdem gibt es einen Administrations-Bereich, in dem man einen Newsletter verschicken kann und die User verwalten kann. Nun habe ich eine auf Sessions basierenden loginsript geschrieben, aber es kommt diese Fehlermeldung:

    "Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /users/maxda/www/Verteiler/home.php:1) in /users/maxda/www/Verteiler/home.php on line 2

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /users/maxda/www/Verteiler/home.php:1) in /users/maxda/www/Verteiler/home.php on line 2"

    Hier ist der code:

    PHP-Quellcode

    1. <? session_start();
    2. if (isset($_POST['kennwort']))
    3. {
    4. $eingabe = $_POST['kennwort'];
    5. $_SESSION['kennwort'] = $eingabe;
    6. }
    7. else
    8. {
    9. $eingabe = $_SESSION['kennwort'];
    10. }
    11. include ("passwort.inc.php");
    12. if ($eingabe == $pass) //Passwort ist richtig...
    13. {
    14. echo '<table style="widht: 600px height: 800px">';
    15. echo '<tr>';
    16. echo '<td>';
    17. $login=1;
    18. }
    19. else // Wenn das Passwort falsch ist...
    20. {
    21. echo '<table>
    22. <form action="home.php" method="post" name="log-in">
    23. <tr>
    24. <td>
    25. Passwort:
    26. </td>
    27. <td>
    28. <input name="kennwort" type="password" size="18" maxlength="18"></p>
    29. </td>
    30. </tr>
    31. <tr>
    32. <td>
    33. <input name="Log-in" type="submit" value="log-in">
    34. </td>
    35. </tr>
    36. </table>
    37. </form>
    38. ';
    39. }
    40. if ($login) // Wenn das Passwort richtig ist...
    41. {
    42. echo'
    43. Wilkommen im gesch&ouml;tzten Bereich!<br><br>
    44. <ul>
    45. <li><a href="userverwaltung.php,SID,">Userverwaltung</a> </li>
    46. <li><a href="senden.php,SID,">Newsletter versende</a> </li>
    47. </ul>
    48. '; }
    49. ?>
    Alles anzeigen



    Edit3: Die Datei Passwort.inc.php enthält einfach nur das Passwort (<? $passwort="das-ist-das-Passwort"; ?>).





    Ws ist an dem Script falsch?
    Ich hoffe ihr könnt mir helfen,
    maxda


    Edit: Auf kilu.de hat das mit den Sessions gut geklappt, aber jatzt habe ich wegen der mail Funtkion zu bplaced.net gewechselt, und nun das...

    Edit2: BB-Tags verändert (code=>php)


    Edit4+5: Ich habe mal zum Test einfach nur

    PHP-Quellcode

    1. <?php session_start(); ?>
    in eine PHP-Datei geschrieben und den Script getestet und dabei kam keine Fehlermeldung!

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von maxda ()

  • Irgendwo werden bereits Daten geschrieben (printf oder echo oder auch direkter HTML Code außerhalb von PHP Tags), bevor du die Session startest. Das kann sein, wenn vor deinem PHP-Code HTML steht oder du die Datei über include einbindest und vorher bereits Daten ausgegeben wurden. Wenn du nicht vermeiden kannst vorher Daten zu schreiben, solltest du dir vielleicht mal Output Buffering (de2.php.net/manual/en/function.ob-start.php) angucken, das hilft mir in solchen Fällen immer.
  • Eine Sache, die diesen Fehler bei mir mal ausgelöst hat, und auf die man so schnell nicht kommt, ist, wenn du die Datei als UTF-8 mit BOM (Byte Order Mark) gespeichert hast. Dann interpretiert PHP diese BOM, die am anfang der datei steht, schon als Text (den man aber nicht sieht) und es kommt zu diesem Fehler. Um das zu verhindern, einfach ohne BOM speichern (in jedem besseren Editor kann man das auswählen)
    “Computers are good at following instructions, but not at reading your mind.” (Donald Knuth)

    Ich schreibe mit Neo.
  • Das ist das gleiche, <? ist einfach eine Abkürzung für <?php. Manche Server interpretieren allerdings die kürzere Version nicht richtig, ich glaube aber nicht, dass das hier der Fall ist. Kann aber nicht schaden, es mal zu versuchen.
    “Computers are good at following instructions, but not at reading your mind.” (Donald Knuth)

    Ich schreibe mit Neo.
  • T-Moe schrieb:

    Irgendwo werden bereits Daten geschrieben (printf oder echo oder auch direkter HTML Code außerhalb von PHP Tags), bevor du die Session startest. Das kann sein, wenn vor deinem PHP-Code HTML steht oder du die Datei über include einbindest und vorher bereits Daten ausgegeben wurden. Wenn du nicht vermeiden kannst vorher Daten zu schreiben, solltest du dir vielleicht mal Output Buffering (de2.php.net/manual/en/function.ob-start.php) angucken, das hilft mir in solchen Fällen immer.
    Vorher wird aber nichts ausgegeben!

    Boddlnagg schrieb:

    Eine Sache, die diesen Fehler bei mir mal ausgelöst hat, und auf die man so schnell nicht kommt, ist, wenn du die Datei als UTF-8 mit BOM (Byte Order Mark) gespeichert hast. Dann interpretiert PHP diese BOM, die am anfang der datei steht, schon als Text (den man aber nicht sieht) und es kommt zu diesem Fehler. Um das zu verhindern, einfach ohne BOM speichern (in jedem besseren Editor kann man das auswählen)
    Ich habe es mit dem gant normalen Windows-Editor geschrieben!?!

    J@kob schrieb:





    maxda schrieb:

    f (isset($_POST['kennwort']))
    ich würde sagen in zeile 3 fehlt ein i beim if, dadurch wird das ganze nicht ausgeführt. (außerdem glaube ich, ich bin mir nicht sicher, dass isset nur mit $_GET funktioniert.)
    versuch das mal statt zeile 3:

    PHP-Quellcode

    1. if ($_POST[kennwort])
    Nein, am if liegt es nicht, das ist beim kopieren passiert, aber ich werde es oben ändern!


    T-Moe schrieb:

    isset funktioniert natürlich auch mit $_POST. Und das fehlende i beim if sollte einen solchen Fehler nicht verursachen, es sei denn es stände außerhalb eines <?php ?> Blocks.
    Das Stimmt!


    Windapple schrieb:

    Sollte da nicht statt <? <?php stehen?
    Muss nicht sein!

    Boddlnagg schrieb:

    Das ist das gleiche, <? ist einfach eine Abkürzung für <?php. Manche Server interpretieren allerdings die kürzere Version nicht richtig, ich glaube aber nicht, dass das hier der Fall ist. Kann aber nicht schaden, es mal zu versuchen.
    Oh, das wusste ich nicht, ich werde es mal ausprobieren und mich dann wieder melden!


    Edit: '<?php' bringt es auch nicht!

    Edit2: Ich habe jetzt mal in eine Datei nur:

    PHP-Quellcode

    1. <?php session_start();
    geschreiben und das funktioniert!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von maxda ()

  • Ich glaube zwar nicht, dass es dran liegt, aber du kannst ja mal versuchen, die Variable nicht mit "$login = 1;" zu definieren sondern mit "$login = true;". (Ich halte das aber für unwahrscheinlich.)
    Desweiteren könntest du ja mal die Datei "passwort.inc.php" posten. Vielleicht befindet sich irgend ein falscher Code dort drin, und das hat dann Auswirkungen auf den Rest des Scriptes.
    Tritt der Fehler schon beim ersten Aufruf des Scriptes auf, oder erst beim zweiten Mal, wenn man sich eingeloggt hat?
  • Der Fehler tritt schon auf, bevor man sich das erste mal einloggt (also wenn das Formular angezeigt wird)! Ich werde zu dem Inhalt von Passwort.inc.php oben noch etwas schreiben! Das mit dem "$login=true;" statt "$login=1;" werde ich mal ausprobieren!


    Edit: Das ändert leider auch nichts an der Fehlermeldung!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von maxda ()

  • Wenn deine Datei wirklich so aussieht wie du oben beschrieben hast wäre Zeile 1 ja <? session_start();. Wie die Fehlermeldung aber ganz klar ausgiebt wird dies als Zeile 2 interpretiert. Folglich muss bei deiner home.php ein Problem vorliegen, das dafür sorgt, dass Daten vor dem eigentlichen Inhalt sind. Öffne die Datei mal mit einem hexeditor und schau nach ob sich irgendwelche "verirrten Bytes" vor dem eigentlichen Inhalt befinden (der Editor gibt diese teilweise nicht aus wenn es keine gültigen ASCII-Zeichen sind) und überprüfe, wie du die Datei hochlädst (FTP? ASCII oder Binary Mode? etc.). Wenn wir all diese Daten haben können wir dir besser helfen ;)
  • Naja, die Fehlermeldung ist noch die alte. Inzwischen ist es Zeile 1! Ich nutze (WS) FTP im binary Modus, aber auch im ASCII Modus funktioniert es nicht.
    ABER das mit dem Hexeditor ist die Lösung des Problems!!! Da sind wirklich 'falsche' bytes! Jetzt klappt es! Vielen Dank T-Moe!!!
    Auch danke an die, die sonst noch geantwortet haben, auch wenn es nicht die passende Lösung war!!!