会话变量在Jquery发布的脚本中不可见?

时间:2011-06-25 00:31:30

标签: java php jquery session

我正在尝试将验证码实现为表单。

有三个文件:

html表单。

php验证码图像生成器。

php captcha checker。

Everythiong工作正常,但我似乎无法在我的验证码检查器脚本上检索验证码脚本创建的Session变量。

表格形式:

<img src="captcha/captcha.php"></img>
<input type="text" id="CAPTCHA"><p id="caperror"></p>
<p><input name="B1" type="submit" value="Submit" />
</form> 

<script>
$('#contactform').submit(function () {
    var cap = $('#CAPTCHA').val();
    cap = 'CAPTCHA=' + cap;
    $.ajax({
        type: 'POST',
        url: 'captcha/capcheck.php',
        data: cap,
        success: success,
        dataType: "text",
        error: postfail
    });
});

function success(result) {
    if (result == 'true') {
        alert('Correct');
        return true;
    } else {
        alert(result);
        return false;
    }
}

function postfail() {
    alert('post failed');
    return false;
}
</script>

会话变量['CAPTCHA']在captcha.php脚本中生成。

我尝试检索它,并使用以下命令检查capcheck.php脚本:

<?php 
session_start();  

if($SESSION['CAPTCHA']) {
echo 'session='.$SESSION['CAPTCHA'];
}
if((isset($POST['CAPTCHA'])) && (isset($SESSION['CAPTCHA']))){
if($_SESSION['CAPTCHA'] != $_POST['CAPTCHA']) {

    echo 'false';


    } else {
    session_destroy();
        echo 'true';
}

}
else{
echo $_POST['CAPTCHA'].'    '. $SESSION['CAPTCHA'];
session_destroy();
}
?>

它总是空的,我不知道为什么!我在没有jquery的情况下,在不同的网站上实现它,并且它完美地运行。

Captcha.php:

    <?php

        session_start();

        /**
         * Send PNG headers to the browser
        **/
        header('content-type: image/png');

        $numbers    = array();
        $numbers[]  = rand(1, 5);
        $numbers[]  = rand(1, 5);

        if(rand(0, 1) == 0) {
            $_op                        = '+'; 
            $code                       = strval($numbers[0]) .' + ' .strval($numbers[1]) .' =';
            $_SESSION['CAPTCHA'] = $numbers[0] + $numbers[1];
        } else {
            $_op                        = '+';  
            $code                       = strval($numbers[0]) .' + ' .strval($numbers[1]) .' =';
            $_SESSION['CAPTCHA'] = $numbers[0] + $numbers[1];
        }
        session_write_close();

        /* Our TTF font file, you may use others */
        $font = dirname(__FILE__) .'/fonts/arial.ttf';

        /* set the width */
        $width  = 16;
        //$width  = (strlen($code) * $width) + 2;   
        $height = 24;

        $code_length = 7;

        $image_height = $height + 2;
        $image_width  = $width * $code_length + 20;

        $im       = imagecreatetruecolor($image_width, $image_height);
        $white  = imagecolorallocate($im, 255, 255, 255);
        imagefill($im, 0, 0, $white);

        /* Some themes */
        $theme   = array();
        $theme[]    = array('CHAR_COLOR' => 
                                array('R' => array(56, 21),
                                        'G' => array(85, 25),
                                        'B' => array(14, 195) 
                                        ),
                               'BG_COLOR' =>
                                array('R' => array(12, 76),
                                        'G' => array(54, 67),
                                        'B' => array(26, 23) 
                                        )
                             );
        $theme[]    = array('CHAR_COLOR' => 
                                array('R' => array(59, 72),
                                        'G' => array(35, 55),
                                        'B' => array(65, 63) 
                                        ),
                               'BG_COLOR' =>
                                array('R' => array(30, 55),
                                        'G' => array(70, 30),
                                        'B' => array(70, 30) 
                                        )
                             );
        $theme[]    = array('CHAR_COLOR' => 
                                array('R' => array(76, 25),
                                        'G' => array(38, 50),
                                        'B' => array(58, 78) 
                                        ),
                                'BG_COLOR' =>
                                array('R' => array(94, 30),
                                        'G' => array(97, 30),
                                        'B' => array(30, 55) 
                                        )
                             );

        $pos_x  = 5;
        $pos_y  = 20;
        $random = rand(0, (count($theme) - 1) );/* Get a random theme */

        /**
         *  Place each character into the image 
        **/
        $angle  = 0;
        $size      = 16;
        for($i = 0, $count = strlen($code); $i < $count; $i++) {

            $color  = imagecolorallocate($im, 
                                                  rand($theme[$random]['CHAR_COLOR']['R'][0], $theme[$random]['CHAR_COLOR']['R'][1]), 
                                                  rand($theme[$random]['CHAR_COLOR']['G'][0], $theme[$random]['CHAR_COLOR']['G'][1]), 
                                                  rand($theme[$random]['CHAR_COLOR']['B'][0], $theme[$random]['CHAR_COLOR']['B'][1])
                                                  );        

            imagettftext($im, $size, $angle, $pos_x, $pos_y, $color, $font, $code{$i});
            $pos_x  += $width + 1;

        }

        /* Finally show image */
        imagepng($im);  
        imagedestroy($im);  
    ?>

1 个答案:

答案 0 :(得分:1)

您的部分$POST$SESSION变量缺少下划线。正如你的评论中所提到的,这似乎是个问题。

在这种情况下,我建议使用带有正确语法高亮支持PHP的文本编辑器,以便轻松识别这些错误。

相关问题