【发布时间】: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 出现在你的回复列表中。