Ankündigung

Einklappen
Keine Ankündigung bisher.

Verlust von Sesion Variablen

Einklappen

Neue Werbung 2019

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

  • Verlust von Sesion Variablen

    Hi Forum!

    Mein erster Post unf gleich eien Frage an euch!

    Ich habe zum Erlernen on PHP und für eine Veranstaltung ein mehrstufiges Anmeldesystem gebastelt.
    Auf 3 Seiten können Interessenten ihren Name, ihre Adresse, ihr bevorzuges Menü usw. angeben.
    Diese Daten werden als Session Variablen gespeichert.
    Am Ende folgen ein Bestätigungsmail und ein Datenbankeintrag mit den Variablen für den Veranstalter.

    Das alles funktioniert an sich auch gut, jedoch gibt es ein Problem.
    Bei ca. einem von 5-10 Fällen fehlen die Variablen der Seiten 1 und 2, während die der 3. Seite erhalten blieben (sehr selten fehlen sogar alle).
    Der Datenbankeintrag ist immer vorhanden, jedoch fehlen dann die Variablen natürlich auch da.


    Was könnte die Session negativ beeinflussen? Sie wird auf jeder benötigten Seite mit "session_start" eröffnet und funktioniert ja meistens auch korrekt.
    Könnte es ein Fehler im Escapen oder eine Browsereinstellung sein?

    Sollte ich eher mit Cookies arbeiten?

    Falls ihr genauere Angaben braucht, sagt bitte Bescheid, was ich liefern soll.


  • #2
    Poste mal ein paar Zeilen Code von einer deiner Seiten, wo Variablen in die Session geschrieben und ausgegeben werden.

    Kommentar


    • #3
      An die Session übergeben wird mit

      Code:
      foreach ($_POST as $key => $value) {
          ${$key} = $value;
          $_SESSION[$key] = $value;
      }
      In unsere Bestätigungsmail finden sie dann so:
      Code:
      <strong>- First Name:</strong>'.  $_SESSION["beispiel1"]. '
      <strong>- Middle Name:</strong>'.  $_SESSION["beispiel2"]. '
      session_start(); immer in der ersten Zeile.

      Kann eine PHP Session ähnlich wie ein SQL Query durch eine Injection zerstört werden?

      Leider kann ich nicht mehr nachvollziehen, was für Werte eingegeben wurden, die sie ja eben dann jeweils komplett fehlen.

      Kommentar


      • #4
        Was soll das hier bewirken?: ${$key} = $value;

        Kommentar


        • #5
          Zitat von Spamversender Beitrag anzeigen
          Was soll das hier bewirken?: ${$key} = $value;
          http://php.net/manual/de/language.va...s.variable.php

          Ob das Sinnvoll ist die andere Frage und ob sich dafür nicht ein Array besser eignen würde.

          Wo sich natürlich auch noch die Frage stellt, ob dieser Codeteil überhaupt von nutzen ist^^
          - Laravel

          Kommentar


          • #6
            Damit werden Forumulardaten automatisch als gleichnamige Sessinvariablen festgelegt.

            Denkt ihr, der Fehler ist codeseitig zu finden? Es will mir nciht in den Kopf, dass eine logische Abfolge meist funktionieren soll, und dann doch wieder nicht...Hilfe Q_Q

            Kommentar


            • #7
              Ich kenne Deine key/value Paare nicht, aber ich tippe drauf dass Du Dir durch
              PHP-Code:
              ${$key} = $value
              Deine Keys überschreibst und findest dann später Deine Werte nicht unter den erwarteten Indizes...

              Kommentar


              • #8
                Danke für den Input!

                Allerdings wurden beim lokalen Testen immer die richtigen Werte ausgegeben...und es funktioniert ja auch fast immer...nur eben nicht ganz immer

                Kommentar


                • #9
                  Warum benutzt du denn eine dynamische Variablennamen vergabe? Es gibt ja nur festgelegte Werte die du übergeben bekommst.
                  Mit einem Array oder Objekt könntest du die o.g. Problematik sicherlich umgehen.

                  Vielleicht kannst du ja auch mal den vollständigen Code posten, dann kann man mal drüberschauen und findet den Fehler vielleicht.

                  Allerdings wurden beim lokalen Testen immer die richtigen Werte ausgegeben...und es funktioniert ja auch fast immer...nur eben nicht ganz immer
                  Vielleicht nimmt er unter bestimmten Umständen auch Variablen Namen mit denen er einfach nicht klar kommt z.B. ein Username mit Sonderzeichen die dann unterschiedlich kodiert werden.

                  Kommentar


                  • #10
                    Hast du auf beiden zum Test auch dein error_reporting mal ganz aufgedreht? Ev. hast du ja davor (manchmal) Ausgaben oder so... Das hier ganz oben ins Script:

                    PHP-Code:
                    error_reporting(-1);
                    ini_set('display_errors'1); 

                    PHP-Code:
                    foreach ($_POST as $key => $value) {
                        ${
                    $key} = $value;
                        
                    $_SESSION[$key] = $value;

                    Und arbeite mit Arrays oder fixen Werten, lass das mit den variablen Variablen. Du kannst übrigens auch so alls Post-Werte in die Session übernehmen, mit allen Nachteilen.. Besser mit Arrays arbeiten, oder fixen Werten.

                    PHP-Code:
                    $_SESSION array_merge($_POST$_SESSION); 
                    Und Sicherheit nicht vergessen!
                    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


                    • #11
                      Vielen Dank für die Antworten!

                      Ich werde also auf die dynamische Erzeugung der Variablen verzichten...kann es echt sein, dass es in Bezug auf Sonderzeichen zu Problem kommt (es wäre möglich, dass es gerade bei Chinesischen Bewerbern Ausfälle gegeben hat...).

                      Der Vorteil an dem Code war, dass man neben den Session-Variablen gleich auch noch immer eine $FORMULARNAME zur Hand hatte.

                      Ich werde es aber, wie von hausl geraten also sein lassen...habe mich da vom scheinbaren Erfolg wohl täuschen lassen!

                      Das error_reporting hat leider nichts ergeben, als wir es durchgeführt hatten.

                      Kommentar

                      Lädt...
                      X