Lukas: Formulardatenverlust verhindern

Hallo,

ein sessiongestütztes System mit Formularen, die der Nutzer ausfüllt bzw. angezeigt erhält.

Wenn der User zu lange untätig ist, wird er ausgeloggt. Bisher verliert er dabei seine Formulardaten, falls das beim Ausfüllen eines Formulares passiert.

Wie ich das verhindern kann, ist schon klar.

Meine Frage ist, welche Vorteile/Nachteile es gibt, abhängig davon, ob ich die $_POST, $_GET und $_SERVER['PHP_SELF'] Werte in einer Session zwischenspeichere oder sie serialisiert in einer DB zwischenspeichere.

Bsp.: Ein User will nur noch einen Vorgang fertigstellen, ist aber schon "auf dem Sprung". Beim Absenden des Formulares wird er ausgeloggt. In diesem Fall wäre er sicher froh, wenn er 2 Std. später nach erneutem Hochfahren des Rechners dennoch keine Daten verloren hat. Ginge aber z.b. nur über serverseitigem Zwischenspeichern.

Lukas

  1. Hallo,

    schau dir mal http://sisyphus-js.herokuapp.com/ an, das sollte helfen

    Viele Grüße
    Helmut

  2. Tach!

    Meine Frage ist, welche Vorteile/Nachteile es gibt, abhängig davon, ob ich die $_POST, $_GET und $_SERVER['PHP_SELF'] Werte in einer Session zwischenspeichere oder sie serialisiert in einer DB zwischenspeichere.

    In der Session sind sie nur browserspezifisch, wenn du den Key nicht in den Nutzerdaten ablegst und die Session selbst langlebig ist. In der Datenbank wirst du es nutzerspezifisch ablegen, wenn du nicht nur den Session-Speicher auf die DB umbiegst. Wenn du nutzerspezifisch speicherst, dann kann dieser von jedem Gerät aus den Prozess wieder aufnehmen.

    dedlfix.

    1. Auch Tach,

      In der Session sind sie nur browserspezifisch, wenn du den Key nicht in den Nutzerdaten ablegst und die Session selbst langlebig ist. In der Datenbank wirst du es nutzerspezifisch ablegen, wenn du nicht nur den Session-Speicher auf die DB umbiegst. Wenn du nutzerspezifisch speicherst, dann kann dieser von jedem Gerät aus den Prozess wieder aufnehmen.

      Ist eine Situation vorstellbar, in der meine Daten "kontaminiert" werden, sei es durch die Verwendung von Schrift- oder Sonderzeichen oder anderer Dinge? Oder ist serialize/unserialize "narrensicher"?

      Lukas

      1. Tach!

        Ist eine Situation vorstellbar, in der meine Daten "kontaminiert" werden, sei es durch die Verwendung von Schrift- oder Sonderzeichen oder anderer Dinge? Oder ist serialize/unserialize "narrensicher"?

        Mir ist nicht bekannt, dass serialize()/unserialize() Daten verändert. Ein paar Hinweise, wie der serialisierte String zu behandeln ist, stehen im PHP-Handbuch. Deine Daten könnten aber anderweitig Schaden nehmen, wenn du sie nicht ordnungsgemäß behandelst, bevor du sie einem anderen System/Kontext übergibst.

        dedlfix.

        1. Deine Daten könnten aber anderweitig Schaden nehmen, wenn du sie nicht ordnungsgemäß behandelst, bevor du sie einem anderen System/Kontext übergibst.

          Hallo,

          sicher, das ist bekannt. Danke trotzdem noch für den zusätzlichen Hinweis.

            
          if (!empty($_GET)) {  
          $my_get = mysql_real_escape_string(serialize($_GET));  
          }  
          if (!empty($_POST)) {  
          $my_post =  mysql_real_escape_string(serialize($_POST));  
          }  
          
          

          Lukas

          1. Hallo,

            leider tritt ein kleines Problem auf.

            Ich habe blöderweise früher nicht zwischen -Array gezogen.

            Soll heißen, ich habe eine relativ bunte Mischung aus $_POST, $_GET und $_REQUEST, aus denen ich meine Seite zusammenstricke.

            Das bedeutet nun, daß ich entweder in mühevoller Kleisnstarbeit jedes Script daraufhin untersuchen und korrigieren muß, ob die Daten per GET oder POST kommen. Oder ich müßte $_GET und $_POST erzeugen und (vorsichtshalber) aus beiden noch das $_REQUEST-Array zusammenbauen.

            Schade, daß ich früher auf die Unterscheidung keinen Wert gelegt habe (was ich seit ein paar Jahren aber mache).

            Frage: Muß ich mir die Arbeit machen (mit all ihren möglichen Fehlerquellen) oder reicht es aus, mir zum $_GET und $_POST Array das $_REQUEST-Array zu basteln?

            Und: Wie setze ich mir das $_REQUEST-Array dann am besten zusammen?

            Lukas

            1. Hallo,

              Ich habe blöderweise früher nicht zwischen -Array gezogen.

              wie bitte??

              Soll heißen, ich habe eine relativ bunte Mischung aus $_POST, $_GET und $_REQUEST, aus denen ich meine Seite zusammenstricke.

              Das ist nicht schön. Gar nicht schön. Man sollte immer wissen, woher man seine Daten bezieht. Sowohl $_GET als auch $_POST zu verwenden, ist nicht verboten, aber sehr ungewöhnlich und nur selten sinnvoll.

              Frage: Muß ich mir die Arbeit machen (mit all ihren möglichen Fehlerquellen) oder reicht es aus, mir zum $_GET und $_POST Array das $_REQUEST-Array zu basteln?

              Ähm, $_REQUEST *ist* schon die Obermenge von $_GET, $_POST und $_COOKIES. Das stellt dir PHP schon als Kombi-Paket zur Verfügung.

              Und: Wie setze ich mir das $_REQUEST-Array dann am besten zusammen?

              Gar nicht. Das bekommst du fertig geliefert.

              Ciao,
               Martin

              --
              Ein Ehepaar beim Sex. Sie fragt ihn: "Woran denkst du gerade?" - Er antwortet: "Kennste sowieso nicht."
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            2. Tach!

              Und: Wie setze ich mir das $_REQUEST-Array dann am besten zusammen?

              Das existiert doch eigentlich schon. Und die Standard-Reihenfolge ist GPC. http://www.php.net/manual/en/reserved.variables.request.php

              dedlfix.

              1. Tach!

                Und: Wie setze ich mir das $_REQUEST-Array dann am besten zusammen?

                Das existiert doch eigentlich schon. Und die Standard-Reihenfolge ist GPC. http://www.php.net/manual/en/reserved.variables.request.php

                Ja klar, das fiel mir auch 10 min. nach meinem Post ein :-)

                Jetzt läuft alles, nachdem mir zuvor noch ein paar Backslashes zuviel etwas Ärger bereitet hatten. Die lagen an eingeschalteten Magic_Quotes. Nach dem Ausschalten läuft alles tadellos.

                Lukas