2014-10-03 2 views
0

Я хочу получить значение captcha в событии onsubmit формы, поэтому, если введенный текст отличается от данных кэширования сеанса, я отменим отправку формы. Проблема заключается в том, что я не могу получить значение сессии искаженным на документ, готовый:Это только отправкой формы, которую может получить сеанс captcha?

файл генерации капчи назван securitecode.php:

<?php 
session_start(); 

$largeur = 120; 
$hauteur = 40; 
$longueur = 5; 
$liste = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; 
$code = ''; 
$counter = 0; 

$image = @imagecreate($largeur, $hauteur) or die('Impossible d\'initializer GD') 
; 

for($i=0; $i<10; $i++) { 
    imageline($image, 
    mt_rand(0,$largeur), mt_rand(0,$hauteur), 
    mt_rand(0,$largeur), mt_rand(0,$hauteur), 
    imagecolorallocate($image, mt_rand(200,255),mt_rand(200,255),mt_rand(200,255) 
)); 
} 

for($i=0, $x=0; $i<$longueur; $i++) { 
    $charactere = substr($liste, rand(0, strlen($liste)-1), 1); 
    $x += 10 + mt_rand(0,10); 
    imagechar($image, mt_rand(3,5), $x, mt_rand(5,20), $charactere, 
    imagecolorallocate($image, mt_rand(0,155), mt_rand(0,155), mt_rand(0,155))); 
    $code .= $charactere; 
} 

    header('Content-Type: image/jpeg'); 
    imagejpeg($image); 
    imagedestroy($image); 

    $_SESSION['securecode'] = $code; 
?> 

В моей веб-странице я создаю капчу изображения:

... 
<img id="captcha_img" src="securitecode.php" /> 
<input type="text" id="captcha" /> 
<span id="msg_captcha"></span> 
... 
<script type="text/javascript"> 
$(document).ready(function() { 
    $('#msg_captcha').html("<?php echo $_SESSION['securecode']; ?>"); 
}); 
</script> 

Когда страница загружается впервые, внутри интервала #msg_captcha ничего не отображается! Итак, как получить данные сеанса captcha?

ответ

3

Это связано с тем, как работают сеансы.

Значения сеанса доступны, когда сеанс завершен, и данные сеанса были записаны в файл сеанса.

При запросе страницы вы фактически пытаетесь получить значение сеанса, которое еще не установлено по двум причинам.

  1. капч изображение загружено после первоначального запроса, но PHP уже обработала <?php echo $_SESSION['securecode']; ?> части.

  2. Значение $_SESSION['securecode'] записано после того, как изображение было загружено.

Так что, в основном, ваше решение пытается прочитать значения слишком рано.

Решение?

Проверьте код captcha с помощью AJAX или проверьте код отслеживания при следующем запросе.

0

Javascript не может запустить PHP таким образом. PHP - это серверный язык, javascript - клиентский. Возможно, this topic может вам помочь.

+0

Вы можете читать переменные php с помощью JSON до тех пор, пока значение сеанса существует до запуска JS. – user1054844

+0

Да, вы можете, но JS не может запускать PHP-скрипт так, как описано в вопросе – SheperdOfFire