无法获取实际的会话变量(HTML / PHP)

时间:2017-07-18 19:16:05

标签: php html session

我有一个验证码生成器 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']。怎么样?

1 个答案:

答案 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) ?>">