如何解决会话变量在Jquery发布的脚本中不可见?
| 我正在尝试将验证码实现为表单。 有三个文件: html表单。 PHP验证码图片生成器。 PHP验证码检查器。 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);
imagefill($im,$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,\'G\' => array(70,30),\'B\' => array(70,30)
)
);
$theme[] = array(\'CHAR_COLOR\' =>
array(\'R\' => array(76,\'G\' => array(38,50),\'B\' => array(58,78)
),\'BG_COLOR\' =>
array(\'R\' => array(94,\'G\' => array(97,\'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适当语法突出显示的支持,这样可以很容易地识别出此类错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。