Ankündigung

Einklappen
Keine Ankündigung bisher.

Wieder mal: session_start(): Cannot send session

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wieder mal: session_start(): Cannot send session

    session_start(): Cannot send session cache limiter - headers already sent

    Ok ich weiß worin das Problem liegt. Es sind einpaar Zeilen zuviel soweit ich mich richtig informiert habe! Ich kenne mich mit JS noch nicht so gut aus, daher habe ich 3 mal das JS mit der selber Funktion, aber unterschiedlichen ID zugewiesen. Mit 2 ID's kommt er zurecht. Beim dritten kommt die session_start(): Cannot send session cache limiter - headers already sent Fehlermeldung. Wie krieg ich das Problem gelöst? Alles weitere unten beschrieben. Habe alles unnötige runtergekürzt also nicht wundern

    PHP-Code:
    <meta charset="UTF-8">

    <script language="javascript">                                       // <-- Erste Funktion
    function changeBox()
    {
    document.getElementById('div1').style.display='none';
    document.getElementById('div2').style.display='';
    document.getElementById('password').focus();
    }
    function restoreBox()
     {
    if(document.getElementById('password').value=='')
    {
    document.getElementById('div1').style.display='';
    document.getElementById('div2').style.display='none';
    }
    }
    </script>

    <script language="javascript">                                      //<--- Zweite Funktion 
    function changeBox2()
    {
    document.getElementById('div3').style.display='none';
    document.getElementById('div4').style.display='';
    document.getElementById('password2').focus();
    }
    function restoreBox2()
    {
    if(document.getElementById('password2').value=='')
    {
    document.getElementById('div3').style.display='';
    document.getElementById('div4').style.display='none';
    }
    }
    </script>

    <script language="javascript">                                      //<-- Dritte Funktion
    function changeBox3()
    {
    document.getElementById('div5').style.display='none';
    document.getElementById('div6').style.display='';
    document.getElementById('password3').focus();
    }
    function restoreBox3()
    {
    if(document.getElementById('password3').value=='')
    {
    document.getElementById('div5').style.display='';
    document.getElementById('div6').style.display='none';
    }
    }
    </script>

              
    </head>

    </br>

    <div id="div1">  //<-- In den nächsten 4 Zeilen kommt die erste Funktion vor. Funktioniert!
    <input type="text" maxlength="25" class="zocial-dribble" name="password" value="Passwort" onfocus="changeBox()" /></div>
    <div id="div2" style="display:none">
    <input name="password" id="password" type="password" value="" maxlength="25" onBlue="restoreBox()" /></div>

    <div id="div3">  //<-- Zu den nächsten 4 Zeilen gehört die zweite Funktion. Funktioniert auch bis hier hin!
    <input type="text" maxlength="25" class="zocial-dribble" name="passwort" value="Neues Passwort" onfocus="changeBox2()" /></div>
    <div id="div4" style="display:none">
    <input name="passwort" id="password2" type="password" value="" maxlength="25" onBlue="restoreBox2()" /></div>


    <div id="div5"> //<---Zu den nächsten 4 Zeile gehört die dritte Funktion. Ab hier taucht die Fehlermeldung auf. Wenn ich das auskommiere läuft es jedoch
    <input type="text" maxlength="25" class="zocial-dribble" name="passwort2" value="Passwort wiederholen" onfocus="changeBox3()" /></div>
    <div id="div6" style="display:none">
    <input name="passwort2" id="password3" type="password" value="" maxlength="25" onBlue="restoreBox3()" /></div>

    <body>

    <?php              // <--- Das ist der Verursacher. Aus bestimmten Gründen steht das wissentlich unten.
    session_start();
    if(!isset(
    $_SESSION['username']))
    {echo 
    "";
    exit;}
    ?>


  • #2
    Was hat das im Fortgeschrittenen Bereich zu suchen?
    PHP-Code:
    // <--- Das ist der Verursacher. Darf nicht oben stehen... 
    Muss es aber.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Ich kenne mich mit JS noch nicht so gut aus, daher habe ich 3 mal das JS mit der selber Funktion, aber unterschiedlichen ID zugewiesen. Mit 2 ID's kommt er zurecht. Beim dritten kommt die session_start(): Cannot send session cache limiter - headers already sent
      Dein JS (JavaScript) hat mit der PHP Session absolut nichts am Hut, HTML und JavaScript gehören zur Ausgabe, werden im Browser verarbeitet, PHP passiert vorher, am Server. Mach dir mal klar wie/wann PHP "passiert" - das und noch alles andere - siehe hier:

      http://php-de.github.io/jumpto/was-ist-php/

      http://php-de.github.io/jumpto/faq/#...s-already-sent

      http://php-de.github.io/jumpto/eva-prinzip/

      BTW: Das ist absolut nicht fortgeschritten.

      LG
      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Eben. Hat es auch nicht.

        Sobald ich diese Zeilen Auskommentiere funktioniert es wieder! Bzw. Erscheint die Fehlermeldung nicht mehr. Aber das ist dasselbe wie bei den div1 div2 div3 und div4. bei div5 und div6 wird das zuviel oder warum wird das nicht akzeptiert?

        PHP-Code:
        <div id="div5"//<---Zu den nächsten 4 Zeile gehört die dritte Funktion. Ab hier taucht die Fehlermeldung auf. Wenn ich das auskommiere läuft es jedoch
        <input type="text" maxlength="25" class="zocial-dribble" name="passwort2" value="Passwort wiederholen" onfocus="changeBox3()" /></div>
        <
        div id="div6" style="display:none">
        <
        input name="passwort2" id="password3" type="password" value="" maxlength="25" onBlue="restoreBox3()" /></div

        Kommentar


        • #5
          Vermutlich genau das bisschen, was über den Buffer hinaus geht. Siehe #2 und #3 und pack es an den Anfang.
          Ansonsten wüsste ich mal gerne deine Begründung, warum es deiner Meinung nach nicht oben stehen darf.
          Zitat von nikosch
          Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

          Kommentar


          • #6
            weil das die inhalte darunter nur anzeigt, wenn man eingeloggt ist.

            PHP-Code:
            <?php   
            session_start
            ();
            if(!isset(
            $_SESSION['username']))
            {echo 
            "";
            exit;}
            ?>
            Hier drunter erscheint ein Log-Off button, nachdem man sich angemeldet hat. (der button setzt sich aus CSS bestandteilen zusammen)

            PHP-Code:
            <body>
            <
            div id="off">
            <
            form action="/Webseite/logout.php">
                <
            input type="submit" value="Abmelden">
                </
            form>

            </
            div>

            </
            body

            Kommentar


            • #7
              Und warum darf das session_start nicht oben stehen?

              PHP-Code:
              if(!isset($_SESSION['username']))
              {echo 
              "";
              exit;} 
              ist eh der Hammer, vorallem da das echo da einfach nur nutzlos ist.
              Zitat von nikosch
              Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

              Kommentar


              • #8
                Zitat von 199708897 Beitrag anzeigen
                weil das die inhalte darunter nur anzeigt, wenn man eingeloggt ist.
                Mach dir mal klar wie/wann PHP "passiert"
                Ok, du hast es nicht verstanden.

                Nochmal: Du entscheidest mit PHP (serverseitig, im Verarbeitungsteil) was du unter welchen Bedingungen an den Browser schickst (Ausgabeteil).

                Du vermischt die serverseitige PHP Verarbeitung mit der Clientseitigen im Browser (HTML, JS, CSS). Das geht so nicht.

                Du muss in PHP prüfen wenn Session dann das an HTML rausschicken, ansonsten wenn keine Session dann den ander HTML.

                Und in der Ausagabe geht dann das gesamte HTML, JS, CSS, an den Browser, was dann dort (hoffentlich valide) laufen kann. Da ist dann PHP aber schon gelaufen.

                LG
                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  Aus dem Grund trennt man Views von Geschäftslogik.

                  Das was du da erfährst ist eine header-already-sent-Problemstellung Es wird auch jahrtausende schon darauf hingewiesen das session_start() in Wackel-Dackel-Scripts grundsätzlich der erste Befehl ist ( wenn man sessions brauch ), den man zu definieren hat. Weit vor jeder Ausgabe.
                  [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                  Kommentar


                  • #10
                    achsoo meinst du das!!

                    also kommt
                    PHP-Code:
                    <?php
                    session_start
                    ();
                    if(!isset(
                    $_SESSION['username']))
                    {echo 
                    "";
                    exit;}
                    ?>
                    ganz nach oben

                    aber man kann dennoch darüber entscheiden mit echo 'bla' und 'blubb' welche inhalte nach und vor dem login angezeigt werden??

                    Kommentar


                    • #11
                      Nö, da du wenn man nicht Eingeloggt ist ($_SESSION['username'] nicht existiert) den Prozess ins Nirvana schickst.

                      Siehe nochmal #3, da solltest du einsteigen: http://php-de.github.io/jumpto/was-ist-php/
                      Zitat von nikosch
                      Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                      Kommentar


                      • #12
                        Trenne doch dein PHP-Code, session_start() ganz oben und den Rest nach deinem HTML.
                        PHP-Klassen auf github

                        Kommentar

                        Lädt...
                        X