Captcha und Session?

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

  • Captcha und Session?

    Hey!

    Ich bau grad ein Captcha, habe aber ein Problem!

    Ich habe eine SessionID und übergebe diese an die Datei captcha.php die im IMG-Tag angegeben wird.

    In der captcha.php generiere ich ein Zufallswert und speichere diesen vor der Ausgabe als Bild in $_SESSION["captcha"]! Die Session in der captcha.php ist die gleiche wie in dem übrigen Dokument (habs getestet).

    Das Problem ist das ausserhalb der captcha.php, ich auf die $_SESSION["captcha"] nicht zugreifen kann, weil es sie nicht gibt!

    Wieso ist das so? Ich hab eine Lösung gesehe, dort geht der Coder den umweg das captcha in der datenbank abzulegen - geht das mit den Session wohl nicht so?


    Danke!

  • #2
    auch überall session_start() angegeben?

    Kommentar


    • #3
      Du kannst keine Resourcen in $_SESSION ablegen!!
      Ansonsten passt da alles rein und geht auch nicht verloren....
      Wir werden alle sterben

      Kommentar


      • #4
        ja session_start ist überall gesetzt!

        wieso resourcen? ich schreibe in $_SESSION["captcha"] nur den Zufallswert rein z.B. "1Ft5Z"

        Kommentar


        • #5
          Das Problem ist das ausserhalb der captcha.php, ich auf die $_SESSION["captcha"] nicht zugreifen kann, weil es sie nicht gibt!
          Seite neu geladen? Bzw. formular abgesendet?

          Kommentar


          • #6
            Original geschrieben von TriphunEM
            ja session_start ist überall gesetzt!

            wieso resourcen? ich schreibe in $_SESSION["captcha"] nur den Zufallswert rein z.B. "1Ft5Z"
            Dann will ich nix gesagt haben...
            Dieses war missverständlich:
            speichere diesen vor der Ausgabe als Bild in $_SESSION["captcha"]!
            Weil Bilder haben erstmal nix in Session zu suchen.
            --------------

            Und nein: Die PHP Sessionverwaltung verliert nicht einfach nur so einzelne Daten!!
            http://technischedaten.de/pmwiki2/pm...essionHandling
            Wir werden alle sterben

            Kommentar


            • #7
              ja nee, da fehlt das komma! ;O) Was will ich auch mit dem Bild ansich anfangen ;O)

              hat jemand nun eine idee woran es liegen könnte!

              Kommentar


              • #8
                Hast du die restlichen Postings gelesen?

                Kommentar


                • #9
                  hab dein posting übersehen. ja hab neu geladen, formular neu abgesendet! übergebe in dem formular auch die sessionId, kommt im bild auch ohne probleme an!

                  so sieht die captcha-datei aus:
                  PHP-Code:
                  <?php

                      define
                  ('LENGTH',        5);
                      
                  define('IMG_WIDTH',     100);
                      
                  define('IMG_HEIGHT',    40);
                      
                  define('FONT_SIZE',     18);

                      
                  session_start();

                      function 
                  randomString($length)
                      {
                          function 
                  make_seed()
                          {
                              list(
                  $usec $sec) = explode (' 'microtime());
                              return (float) 
                  $sec + ((float) $usec 100000);
                          }
                          
                  srand(make_seed());
                          
                  $possible "ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
                          
                  $captcha  "";
                          while (
                  strlen($captcha)<$length)
                              
                  $captcha .= substr($possible,(rand()%(strlen($possible))),1);
                          return 
                  $captcha;
                      }
                      
                      if (
                  $_GET[session_name()])
                      {
                          
                  $captcha randomString(LENGTH);
                          
                  $_SESSION["captcha"] = $captcha;

                          
                  header('Content-Type: image/jpeg'true);
                          
                  $image   ImageCreate(IMG_WIDTHIMG_HEIGHT);
                          
                  $bgcolor imagecolorallocate($image255255255);
                          
                  $color   imagecolorallocate($image55101154);
                          
                  imagettftext($imageFONT_SIZE0929$color"captcha.ttf"$_SESSION["captcha"]);

                          
                  $border  imagecolorallocate($image000);
                          
                  imagerectangle($image00IMG_WIDTH-1IMG_HEIGHT-1$color);

                          
                  imagejpeg($image,'',100);
                          
                  imagedestroy($image);
                      }
                      else
                      {
                          
                  header('Content-Type: image/jpeg'true);
                          
                  $image   ImageCreate(IMG_WIDTHIMG_HEIGHT);
                          
                  $bgcolor imagecolorallocate($image255255255);
                          
                  $color   imagecolorallocate($image55101154);
                          
                  imagettftext($image1001025$color"captcha.ttf""No Session");

                          
                  $border  imagecolorallocate($image000);
                          
                  imagerectangle($image00IMG_WIDTH-1IMG_HEIGHT-1$color);

                          
                  imagejpeg($image,'',100);
                          
                  imagedestroy($image);
                      }
                  ?>

                  Kommentar


                  • #10
                    Sehe spontan keine Testausgaben...

                    Warum setzt du vorraus, dass die SessionID über die URL übergeben wird?
                    Welche Version von PHP setzt du ein, dass du srand() brauchst?

                    Wo überprüfst du, ob die Hauptseite nachher auch noch die selbe SID hat?
                    Mal andere Werte auf der Hauptseite in der Session gespeichert?
                    Zuletzt geändert von TobiaZ; 25.10.2007, 11:44.

                    Kommentar


                    • #11
                      Benutze PHP5? Brauch man wohl kein srand() mehr?

                      Naja, ich übergebe dem Captcha die sessionid, von der hauptseite!
                      Auf der Hauptseite sind alle Werte die vorher gesetzt wurden auch noch da, eben aber nicht der Wert aus dem Captcha!?

                      Kommentar


                      • #12
                        Auf der Hauptseite sind alle Werte die vorher gesetzt wurden auch noch da, eben aber nicht der Wert aus dem Captcha!?
                        Interessant wäre zu wissen ob diese Werte, die du auf der Hauptseite in Session speicherst in der captcha.php auch vorhanden sind
                        PHP-Code:
                        //captcha.php
                        session_start();
                        var_dump($_SESSION);
                        exit; 
                        und die captcha.php mal direkt via URL inkl Session ID der Hauptseite im Browser aufrufen. Sind die Session Vars noch vorhanden, die du auf der Einstiegsseite gesetzt hast?

                        Gruss

                        tobi
                        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                        Kommentar


                        • #13
                          hey! also in der captcha.php sind die anderen Werte aus der Hauptseite verfügbar!

                          Warum zum Teufel kann ich aber kein Wert in der captcha.php setzen? das gibts doch garne...

                          Kommentar


                          • #14
                            Warum zum Teufel kann ich aber kein Wert in der captcha.php setzen? das gibts doch garne...
                            Stimmt gibt's gar nicht Weil es muss funzen --> ergo machst du irgendwo noch einen Fehler. Wenn du den Wert in captcha.php setzt, dann hast du vor der Prüfung in der Hauptseite schon noch eine Useraktion ausgelöst? Hast du mal zum Testen die Cookies im Browser deaktiviert und gelöscht?
                            PHP-Code:
                            <?php
                            //Testcode
                            session_start();
                            if(!isset(
                            $_POST['senden'])){
                            ?>
                            <html>
                            <head>
                            </head>
                            <body>
                            <form action="<?php echo $_SERVER['PHP_SELF'].'?'.strip_tags(SID);?>" method="post">
                            <input type="text" name="captchaCode" /><br />
                            <img src="/path/to/captcha.php?<?php echo strip_tags(SID);?>" />
                            <input type="submit" name="senden" />
                            </form>
                            </body>
                            </html>
                            <?php
                            }else{
                              
                            var_dump($_SESSION);
                            }
                            Nach Absenden muss die von captcha.php gesetzte Session Var gefunden werden. Ich habe schon ein paarmal ein Captcha gemacht und kann daher sagen dass es gehen muss

                            Gruss

                            tobi

                            Gruss

                            tobi
                            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                            Kommentar

                            Lädt...
                            X