Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit SESSION (Captcha)

Einklappen

Unconfigured Ad Widget

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

  • Problem mit SESSION (Captcha)

    Guten Abend bzw. guten Morgen!
    Ich versuche gerade eine Art Captcha zu erstellen, aber irgendwie funktioniert meine SESSION nicht, wenn ich diese in der Datei erzeuge, die auch die Grafik erzeugt.

    Wenn ich ganz banal folgendes mache:
    PHP-Code:
    <?php
    session_start
    ();
    unset(
    $_SESSION["test"]);
    $zahl rand(100,999);
    $_SESSION["test"] = $zahl;
    echo 
    "Gebe die Zahl $zahl ein:";
    ?>
    <form action="test.php" method="post">
    <input name="eingabe"><br>
    <input type="submit" value="abschicken">
    </form>
    und das ganze dann wie folgt entgegennehme (test.php):
    PHP-Code:
    <?php
    session_start
    ();
    $erwartet $_SESSION["test"];
    $eingabe $_POST["eingabe"];
    echo 
    "Du solltest die Zahl $erwartet eingeben und hast die Zahl $eingabe eingegeben!";
    unset(
    $_SESSION["test"]);
    ?>
    ...dann funktioniert alles!

    Wenn ich die SESSION jedoch in einer Grafikdatei (grafik.php) starte, ist die SESSION Variable Test immer leer.

    Code:
    <img src="grafik.php">
    <br>
    Gebe die Zahl aus dem Bild ein!
    <form action="test.php" method="post">
    <input name="eingabe"><br>
    <input type="submit" value="abschicken">
    </form>
    grafik.php:
    PHP-Code:
    <?php
    session_start
    ();
    unset(
    $_SESSION["test"]);
    $zahl rand(100,999);
    $_SESSION["test"] = $zahl;
    header("Content-type: image/png");
    $bildholen ImageCreateFromPNG('meinbild.png');
    $schriftfarbe ImageColorAllocate($bildholen255255255);
    $schrift "blablabla.ttf";
    $schriftsize 20;
    $angle 0;
    $x 20;
    $y 20;
    imagettftext($bildholen$schriftsize$angle$x$y$schriftfarbe$schrift$zahl);
    imagepng($holebild);
    imagedestroy($holebild);
    Wenn ich das oben stehende Formular abschicke und mit der oben stehenden test.php auswerte, lautet die Ausgabe halt exemplarisch:

    Du solltest die Zahl eingeben und hast die Zahl 392 eingegeben!
    $_SESSION["test"] ist also leer. Nun frage ich mich, warum das obere Beispiel funktioniert, nicht aber bei zweiter Variante. Kann mir jemand helfen?


  • #2
    Du musst session_start() in jeder Datei haben.

    Kommentar


    • #3
      Also auch in der Datei, die nur das Formular enthält und keinen PHP-Code?
      In den anderen beiden Dateien (grafik.php und test.php) habe ich ja session_start.

      EDIT:
      Das löst das Problem leider nicht. Habe jetzt in allen drei Dateien ein session_start.

      Kommentar


      • #4
        Guten Abend!
        Ich möchte meinen Thread ja nicht mit aller Gewalt pushen, jedoch habe ich noch immer keine Lösung für mein Problem gefunden.

        Kann mir denn niemand verraten, warum die SESSION_Variable nicht übergeben wird, wenn Sie in einer per <img>-Tag inkludierten Datei erzeugt wird?

        Kommentar


        • #5
          vermutlich, weil die grafik.php nicht über die normalen Wege (require() usw.) eingebunden wird.

          Ich würde mal Folgendes versuchen:
          statt <img src="grafik.php">
          require_once("grafik.php");

          und dann in grafik.php (natürlich mit session_start())
          echo "<img src='meinbild.png'>";

          Kommentar


          • #6
            Nein, nein, require ist falsch. grafik.php setzt eindeutig Grafik-header und gibt Bildcode aus. Und echo "<img src='meinbild.png'>"; in diesem Script funktioniert nicht. Weil meinbild.png ja nicht existiert und vorher temporär geschrieben werden müsste. Macht keinen SInn.

            Ich sehe oben keinen Fehler. Du kannst
            PHP-Code:
            unset($_SESSION["test"]); 
            mal weglassen, der Wert wird sowieso gesetzt. Der Grund dürfte das aber eigentlich nicht sein.
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar


            • #7
              dann würde ich versuchen, den Wert als Parameter oder vonmiraus als global an grafik.php zu übergeben.

              Kommentar


              • #8
                Zitat von chakaa Beitrag anzeigen
                dann würde ich versuchen, den Wert als Parameter oder vonmiraus als global an grafik.php zu übergeben.
                Das ist genauso schlecht, da er in grafik.php den wert nicht braucht, sondern ihn erstellt. Seine vorgehensweise ist schon richtig, ich seh da jetzt auf den ersten Blick auch keinen fehler.

                Hast du dir mal alle errors (auch notices) ausgeben lassen, wenn du die grafik.php manuell aufrufst?

                Kommentar

                Lädt...
                X