Session und Zufallsbild (Captcha)

Microhome

Erfahrenes Mitglied
Hallo liebe Community,
ich verwende die Captcha Klasse von http://www.powie.de/cms/forum/showthread.php?id=21009. Jedoch kann ich die Session nicht ausgeben. Ist da möglicherweise eine Einstellung in der php.ini falsch?

show.php
Code:
<?php
require "class_captcha.php";
session_start();
$pc = new pCaptcha();
$pc->showCaptcha();
?>

pass.php
Code:
<?
echo "<img src=\"show.php\"><br><br>";
$pwd = $_SESSION['pcaptchacode'];
echo "Passwort: $pwd";
?>

Das Captcha-Bild wird auch korrekt angezeigt und irgendwie scheinen Sessions ja zu funktionieren, denn es wird solange das selbe Passwort im Captcha angezeigt, wie ich den Browser nicht schließe.

Hier die Klasse:
Code:
<?php
putenv('GDFONTPATH=/var/fonts');
class pCaptcha
{
    var $pcap_fontsize;     //Schriftgrösse
    var $pcap_font;         //Schriftart (ttf)
    var $pcap_code;         //Der CODE
    var $pcap_len;          //Codelänge
    var $pcap_bg;           //Hintergrund

    // PHP 5 Constructor
    function __construct( $pcap_code = "" )
     {
        $this->pcap_code      = "";
        $this->pcap_font      = "ltromatic";
        $this->pcap_bg        = "back.png";
        $this->pcap_fontsize  = 24;
        $this->pcap_len       = 6;
        if ($this->pcap_code == "" ) {
            $this->newCode();
        } else {
            $_SESSION['pcaptchacode'] = $this->pcap_code;
        }
    }
    // PHP 4 Contructor
    function pCaptcha( $pcap_code = "" )
    {
        $this->__construct( $pcap_code ) ;
    }

    function showCaptcha ()
    {
        $img_format = 'png';

        //Daten des BG
        $imgsize = GetImageSize($this->pcap_bg);
        switch($imgsize[2]):
        case 1 : $bg = ImageCreateFromGIF($this->pcap_bg);
            break;
        case 2 : $bg = ImageCreateFromJPEG($this->pcap_bg);
            break;
        case 3 : $bg = ImageCreateFromPNG($this->pcap_bg);
            break;
        endswitch;

        //Textgrösse
        $pos = imagettfbbox($this->pcap_fontsize,0,$this->pcap_font,$this->pcap_code);
        //var_dump($pos);
        $width  = intval(abs($pos[0])+abs($pos[2])+6);
        $height = intval(abs($pos[1]+$pos[7])+6);
        $posx   = 3;
        $posy   = $height - 3;
        $pcap_im = imagecreatetruecolor($width,$height);
        imagecopyresampled($pcap_im,$bg,0,0,0,0,$width,$height,ImageSX($bg),ImageSY($bg));

        //Text einfügen
        // colors
        $color_white    = imagecolorallocate($pcap_im, 0xFF, 0xFF, 0xFF);
        $color_black    = imagecolorallocate($pcap_im, 0x00, 0x00, 0x00);
        imagettftext($pcap_im,$this->pcap_fontsize,0,$posx,$posy,$color_black,$this->pcap_font,$this->pcap_code);

        imageinterlace($pcap_im,false);

        $pcap_image = 'image'.$img_format;
        // sending image
        header('Content-type: image/'.$img_format);
        $pcap_image($pcap_im);
    }

    function newCode()
    {
        if ( !isset($_SESSION['pcaptchacode']) ) {
            $iid= md5(uniqid(rand()));
            $iid= substr($iid,0,$this->pcap_len);
            $_SESSION['pcaptchacode'] = $iid;
            $this->pcap_code = $iid;
        } else {
            $this->pcap_code = $_SESSION['pcaptchacode'];
        }
    }
    function delCode()
    {
        if ( isset($_SESSION['pcaptchacode']) ) {
            unset ( $_SESSION['pcaptchacode'] );
        }
    }
}
?>

Als Ausgabe bekomme ich eben das Bild angezeigt und dadrunter steht dann Passwort: aber dann wird der Inhalt der Session halt nicht ausgegeben. Was mache ich falsch?


Liebe Grüße
m!cro
 
Hallo,

dann ändere das so ab:
PHP:
<?php
    session_start();
    require "class_captcha.php";    
    $pc = new pCaptcha();
    $pc->showCaptcha();
?>
Session sollte vor Bekanntmachung von $_SESSION['pcaptchacode'] gestartet werden.


Gruß

RS9999:)
 
Hmm, funktioniert aber auch nicht. Hab in der show.php die beiden Zeilen getauscht aber das Ergebnis ist leider das selbe :mad:

Hab mal noch was getestet. Also über pass.php scheints ja nicht (warum?) nicht zu funktionieren.
Habe show.php mal ein Bisschen abgewandelt und siehe da, wenn ich show.php öffne dann zeigt
er mir den Session-Array an: Array ( [pcaptchacode] => 0eade9 )

show.php (abgewandelt)
Code:
<?php
session_start();
require "class_captcha.php";
$pc = new pCaptcha();
print_r($_SESSION);
//$pc->showCaptcha();
?>

Woran liegt das denn Nun hat show.php natürlich das Captcha nicht angezeigt aber die Session scheint ja zu laufen. Nur pass.php zeigt sie nicht an, wieso?
 
Zuletzt bearbeitet:
LOL super.. vor lauter source-lesen die ganze Zeit übersehen gehabt: in pass.php fehlt einfach nur nen session_start().
Hab das ganze jetzt aber in nem eigenen Script gemacht (15 Zeilen). FUnktioniert einwandfrei und ist wesentlich einfacher als die o.g. Klasse.. naja.

Danke trotzdem fürs lesen!
 

Neue Beiträge

Zurück