【问题标题】:Session variables not visible in a Jquery posted script?会话变量在 Jquery 发布的脚本中不可见?
【发布时间】:2011-09-22 10:23:09
【问题描述】:

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

共有三个文件:

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>

会话变量 ['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);  
    ?>

【问题讨论】:

  • 请至少发布 captcha.php 的相关部分。
  • 您的某些 $POST$SESSION 变量缺少下划线。这是复制/粘贴错误还是?
  • 呃....尴尬。需要另一双眼睛,我整天编码,对自己的愚蠢视而不见。非常感谢。
  • 发生了,Bjom,您能否将其发布为答案,以便他可以结束此问题?
  • @Björn 您应该查看此问题以添加您的评论作为答案。我写了这个评论,因为我不知道你的用户名中的变音符号是否阻止了以前的发帖者 cmets 出现在你的回复列表中。

标签: java php jquery session


【解决方案1】:

您的某些$POST$SESSION 变量缺少下划线。正如您的 cmets 中所述,这似乎是问题所在。

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

【讨论】:

  • 我现在正在使用notepad++...我喜欢Zend studio,但我的试用版已经用完了,而且我的公司很便宜。我不认为 notepad++ 有非常复杂的语法高亮,而且我没有看到在那个区域添加任何东西的插件。但我绝对同意你的观点,语法错误突出显示对我这样的简单错误很有帮助。
猜你喜欢
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
  • 2020-06-20
  • 2012-04-23
  • 2012-12-26
  • 1970-01-01
相关资源
最近更新 更多