Только отправив форму, можно получить капчу сеанса?

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

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

<?php
session_start();

$largeur  = 120;
$hauteur  = 40;
$longueur = 5;
$liste = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
$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 ничего не отображается! Так как же получить данные сеанса капчи?

0

Решение

Это из-за способа работы сессий.

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

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

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

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

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

Решение?

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

3

Другие решения

Javascript не может запустить PHP таким образом.
PHP — это язык на стороне сервера, javascript — на стороне клиента.
Может быть Эта тема могу помочь тебе.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector