2017-07-18 20 views
0

私は、$_SESSION['captcha_string']セッション変数に値文字列を与えるcaptcha-generator phpコードを持っています。実際のセッション変数(HTML/PHP)を取得できません

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 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';  
    $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コード:

<?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']が同時に適切なペアになることをどうすれば達成できますか?実際には、ACTUAL$_SESSION['captcha_string']をjavascript関数で使用する必要があります。どうやって?

答えて

1

この部分は、ブラウザにページを送信した後にcaptcha_generator.phpをロードすることを意味します。

<img id="captchaimg" src="captcha_generator.php"> 
<div><?php echo $_SESSION['captcha_string'] ?></div> 

画像用に新しいCaptchaを生成しています。あなたはそれを回す必要があります。

ページの読み込み時に新しいCaptchaを生成し、以前に生成されたCaptchaをイメージリクエストで返すことができます。


あなたはcaptcha_generator.phpデータ-SRCとして直接送信、その後、画像の内容を返してきた場合は、この問題を回避することができます:私はまさにそれを理解していない

<img id="captchaimg" src="data:image/png;base64,<?php echo base64_encode(include captcha_generator.php) ?>"> 
+0

を。実行順序はHTMLのコードの順序と同じではありませんか?最初にキャプチャが生成され、セッション変数が設定され、次に「プリントアウト」されます。 – ZsG

+0

問題は:あなたは 'captcha_generator.php'を呼んでいません。ブラウザは、ページ全体を送信してイメージをロードした後です。 – colburton

+0

したがって、generator-phpが動く前にページ全体がロードされていますか? – ZsG

関連する問題