我有一个验证码生成器 php 代码,它为$_SESSION['captcha_string']
会话变量提供了值字符串。
PHP验证码生成器代码:
<?php
session_start();
header ("Content-type: image/png");
$dirPath="/opt/lampp/htdocs/WebSiteFolder/dfxCaptcha/";
$font='/opt/lampp/htdocs/WebSiteFolder/DejaVuSerif-Bold.ttf';
$imgWidth=200;
$imgHeight=50;
global $image;
$image = imagecreatetruecolor($imgWidth, $imgHeight) or die("Cannot initialize a new GD image stream.");
$background_color = imagecolorallocate($image, 0, 0, 0);
$text_color = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image, 0, 0, $imgWidth, $imgHeight, $background_color);
$letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$len = strlen($letters);
$letter = $letters[rand(0, $len - 1)];
$word = "";
for ($i = 0; $i < 4; $i++) {
$letter = $letters[rand(0, $len - 1)];
imagettftext($image, 15, 0, $i*50+25, 50, $text_color, $font, $letter);
$word .= $letter;
}
$_SESSION['captcha_string'] = $word;
$images = glob($dirPath."*.png");
foreach ($images as $image_to_delete) {
@unlink($image_to_delete);
}
imagepng($image);
?>
暂时,当我加载运行验证码生成器的页面时,我尝试打印出(见下面的代码)$_SESSION['captcha_string']
变量的值,但它给出了之前生成的值(即:延迟)。例如,我加载页面,验证码图像显示“ABCDE”。我重新加载页面,验证码图像显示“BCDEF”,但打印值为“ABCDE”。之后我再次重新加载页面,验证码图像显示“CDEFG”,打印值为“BCDEF”。
HTML code:
<?php session_start(); ?>
<!DOCTYPE html>
.. some irrelevant code here ..
<img id="captchaimg" src="captcha_generator.php">
<div><?php echo $_SESSION['captcha_string'] ?></div>
我该怎么做?
更新:我怎样才能实现图像和$_SESSION['captcha_string']
同时成为合适的一对?实际上我需要在javascript函数中使用 ACTUAL $_SESSION['captcha_string']
。怎么样?
答案 0 :(得分:1)
此部分表示您的浏览器在您向其发送页面后加载captcha_generator.php
。
<img id="captchaimg" src="captcha_generator.php">
<div><?php echo $_SESSION['captcha_string'] ?></div>
您正在为图像生成新的Captcha。你需要扭转它。
您可以在页面加载时生成新的Captcha,并在图像请求中返回先前生成的Captcha。
如果captcha_generator.php
返回图片内容,则可以避免此问题,然后将其直接发送为data-src:
<img id="captchaimg" src="data:image/png;base64,<?php echo base64_encode(include captcha_generator.php) ?>">