Ankündigung

Einklappen
Keine Ankündigung bisher.

echo verändert Session-Variable

Einklappen

Neue Werbung 2019

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

  • echo verändert Session-Variable

    Hallo,
    ich habe eine Anwendung, deren HTML über eine Template Engine geladen wird. in der letzten Zeile jeder Datei wird die Methode zum Anzeigen des HTML aufgerufen. Diese sieht so aus:
    PHP-Code:
    public function display(){

            
    //CSRF-Token setzen
            
    $_SESSION["csrf_token"] = bin2hex(openssl_random_pseudo_bytes(4));
            
    var_dump($_SESSION["csrf_token"]);

            ...

            echo 
    $this->html//ausgeben
        

    Zusätzlich habe ich am Anfang jeder Datei nach dem session_start(); einen weiteren var_dump um diese Session Variable auszugeben.
    Das heißt, beim Laden der Seite gibt mir das letzte var_dump einen String, der in der Session gespeichert wird und demnach beim Neuladen der Seite im ersten var_dump identisch sein muss. Das Problem tritt nicht auf, wenn das echo weg ist (könnte es an der relativ großen html-Variable liegen?). Übrigens wird in den Session-Dateien der Wert gespeichert, der im ersten var_dump ausgegeben wird, d.h. dort wurde er schon geändert.
    Hat jemand Ideen?
    Ich leb diesen Shit.

  • #2
    Wenn du eine Ausgabe mit Echo machst, dann gibt es keine Session-Start mehr, da ja schon an den Browser gesendet wurde. Das sollte man beachten.

    Kommentar


    • #3
      Das ist mir klar, das ist jedoch kein Problem, da der Session-Start ja am Anfang der Datei gemacht wird.
      Ich leb diesen Shit.

      Kommentar


      • #4
        Also an der Größe der HTML-Variable liegt es sicherlich nicht, da musst du wohl weiter suchen.

        Kommentar


        • #5
          Um das mit dem echo mal abzugrenzen, anstelle echo $this->html; mal ein return $this->html; und die Ausgabe dann mit echo $tpl->display(); machen bzw. auch das echo mal weglassen.
          Ich gebe auch komplette Seiten mit einem echo $html; am Ende aus und hatte noch nie Probleme damit.

          Kommentar


          • #6
            Zitat von jspit Beitrag anzeigen
            Um das mit dem echo mal abzugrenzen, anstelle echo $this->html; mal ein return $this->html; und die Ausgabe dann mit echo $tpl->display(); machen bzw. auch das echo mal weglassen.
            Ich gebe auch komplette Seiten mit einem echo $html; am Ende aus und hatte noch nie Probleme damit.
            Danke für den Tipp, aber das Problem ist dasselbe.

            Das Problem tritt auch wirklich nur auf, wenn die Zuweisung in der Funktion erfolgt (aber auch wenn in der Funktion eine weitere Funktion mit dieser Zuordnung aufgerufen wird).
            Ich leb diesen Shit.

            Kommentar


            • #7
              Arbeitest du evtl. mit ob_start() ? Wird die Ausgabe wo zwischengespeichert (Template Engine) und dann erst manipuliert?

              Kommentar


              • #8
                Zitat von munzili Beitrag anzeigen
                Arbeitest du evtl. mit ob_start() ? Wird die Ausgabe wo zwischengespeichert (Template Engine) und dann erst manipuliert?
                Nein, auch das nicht.

                Ich habs auch mal auf nem Linux Server mit Apache getestet, auch keine Besserung.
                Ich leb diesen Shit.

                Kommentar


                • #9
                  Hier ist bis zum letzten var_dump alles ok?
                  PHP-Code:
                  public function display(){

                          
                  //CSRF-Token setzen
                          
                  $_SESSION["csrf_token"] = bin2hex(openssl_random_pseudo_bytes(4));
                          
                  var_dump($_SESSION["csrf_token"]);

                          ...
                           
                  var_dump($_SESSION["csrf_token"]);
                          echo 
                  $this->html//ausgeben
                           
                  var_dump($_SESSION["csrf_token"]);
                      } 
                  Das Error-Reporting ist voll aufgedreht und es kommen keine Meldungen?

                  Wenn dies alles der Fall ist, mal vor der Zuweisung/Ausgabe des html eine Zeile mit
                  PHP-Code:
                  session_write_close(); 
                  einfügen. Besser wäre noch gleich nach dem letzten Schreiben auf das Sessionarray.

                  Kommentar


                  • #10
                    Das hat alles leider auch nichts gebracht. Fehler gibts keine.
                    Ich leb diesen Shit.

                    Kommentar


                    • #11
                      Zitat von Natha Beitrag anzeigen
                      Das hat alles leider auch nichts gebracht. Fehler gibts keine.
                      Etwas spärlich die Informationen von dir. Wir haben weder reproduzierbaren Code noch andere Informationen wie z.B. die benutzte Template Engine.
                      So ist das nur ein Stochern im Nebel. Ich spendiere mal noch eine kleines Testskript, das erst allein und dann mal vor/nach deiner Anwendung aufgerufen werden kann.
                      PHP-Code:
                      <?php
                      session_start
                      ();
                      $strDate date("d.m.Y H:i:s");
                      echo 
                      $strDate."<br>\r\n";
                      echo 
                      '<pre>';
                      var_dump(array("SESSION" => $_SESSION,"COOKIE" => $_COOKIE));
                      echo 
                      '</pre>';
                      $_SESSION['show_global_test'] = $strDate;
                      Das Skript dient der Diagnose. Wenn du möchtest das dir hier geholfen werden kann, dann poste die Ergebnisse bzw. berichte hier darüber.




                      Kommentar


                      • #12
                        Also die Template Engine habe ich selbst entwickelt, da gibt es leider keine Code-Referenzen.
                        Das Testskript mit dem Datum funktioniert so weit (allein oder in der Datei mit dem restlichen Code; das zuletzt gesetzte Datum wird beim Neuladen angezeigt), nur wenn ich es in jener Methode aufrufe, wird mir alle paar (etwa alle 5) Versuche eine Sekunde zu viel oder zu wenig angezeigt.
                        Ich leb diesen Shit.

                        Kommentar


                        • #13
                          Du solltest Testcode posten, bei dem das Problem nachvollziehbar auftritt. Alles andere ist nur Glaskugellesen.

                          Wenn du keinen Testcode posten willst/kannst, dann solltest du wohl jemanden beauftragen, der sich das Problem bei dir ansieht. Denn das kann ein Forum nicht leisten.

                          Kommentar


                          • #14
                            Irgendwie schaffe ich es nicht, die abgespeckte Form der komplette Anwendung mit dem nachvollziehbaren Problem zu erstellen...da muss ich wahrscheinlich das komplette Teil anhängen.
                            Ich hab aber weiter herausgefunden, dass das Problem nur auftritt, wenn in dem HTML, das in der Funktion über echo ausgegeben wird, ein <link> auf eine nicht vorhandene CSS-Datei drin ist.
                            Ich leb diesen Shit.

                            Kommentar


                            • #15
                              Beachtest du denn bei deiner Anwendung den Kontextwechsel von PHP zu HTML?

                              Kommentar

                              Lädt...
                              X