java - session 变量在 Jquery 发布的脚本中不可见?

标签 java php jquery session

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

一共有三个文件:

html 表单。

PHP 验证码图像生成器。

php 验证码检查器。

一切都工作正常,但我似乎无法在我的验证码检查器脚本上检索验证码脚本创建的 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>

session 变量 ['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 实现了它,并且它工作得很好。

验证码.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);  
    ?>

最佳答案

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

在这种情况下,我建议使用具有适当语法突出显示支持 PHP 的文本编辑器,以便轻松识别此类错误。

关于java - session 变量在 Jquery 发布的脚本中不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6475016/

相关文章:

javascript - Jquery hover - 如何制作背景色动画

javascript - 如何通过模糊其余部分来突出网页的一部分?

java - Spring Boot 和 Thymeleaf - 删除严格的 HTML 错误检查

php - 正则表达式 - preg_replace 字符串

php - 尝试在 php 中实现(理解)Decorator 模式

JQuery > ScrollTo > 突出显示滚动到的项目

java - 如何订购AOP切面和MVC拦截器?

java - 使用 SDL 将现有的 Lunar Lander 程序从 C 转换到 Android 手机

java - 打开时如何将导航 View 放在底部导航 View 上?

php - 获取在 phpmyadmin 上工作的 Microsoft Server 2008 sql 查询