Captcha и сессии

Статус
В этой теме нельзя размещать новые ответы.

pavlodaranet

Новичок
Captcha и сессии

Есть файл captcha.php в этом файле генерится капча $_SESSION['code']=rand(1000,9999);

есть файл view_news.php?id=1

в нем есть форма (сократил)

<form name="form1" method="post" action="add_comment.php">


<p>введите код, указанный на картинке <img src="captcha.php"> <input type="text" id="code" name="code" size="4" maxlength="4"></p>

<input type="hidden" name='add_comment' value='<?php echo $id; ?>' >

<p>
<label>
<input type="submit" name="submit" id="submit" value="Отправить">
</label>
</p>

</form>


Есть файл add_comment.php


когда запускаю проверку в add_comment.php:


if (empty($_POST['code']) or empty($_SESSION['code'])) {
echo 'Вы не указали код подтверждения';
} elseif ($_POST['code'] != $_SESSION['code']) {
echo 'Код подтверждения не совпадает';
} else {
echo 'Всё Ok!';
}


в нем получается $_SESSION['code'] не равен $_POST['code']
$_POST['code'] равен следующему генерируемому числу

Картинку с капчей показываю раньше чем проверяю. Что можно изменить?
 

HraKK

Мудак
Команда форума
phpfaq.ru/debug
Смотри где меняется сессия.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Привет землякам. ;)
А ты уверен, что на картинке отображается верный код, а не
следующий?
т.е. может ты его сначала рисуешь из сессии, потом генеришь новый и кладешь в сессию... что нить вроде того.

Покажи captcha.php
 

pavlodaranet

Новичок
открывается view_news - генерируется одна сессия
а когда выполняется скрипт add_comment уже другая - следующая.
отсюда и несовпадения. как можно изменить данный баг?
 

HraKK

Мудак
Команда форума
->
phpfaq.ru/debug
Смотри где меняется сессия.
 

pavlodaranet

Новичок
captcha.php

<?php
session_start();
$im = @imagecreate (40, 15) or die ("Cannot initialize new GD image stream!");
$bg = imagecolorallocate ($im, 232, 238, 247);
$char = $_SESSION['code'];

//создаём шум на фоне
for ($i=0; $i<=128; $i++) {
$color = imagecolorallocate ($im, rand(0,255), rand(0,255), rand(0,255)); //задаём цвет
imagesetpixel($im, rand(2,80), rand(2,10), $color); //рисуем пиксель
}
/* $color = imagecolorallocate($img, 0, 0, 0);*/

$_SESSION['code']=rand(1000,9999);

// write the string at the top left
imagestring($im, 5, 0, 0, $char, $color);

//создание рисунка в зависимости от доступного формата

if (function_exists("imagepng")) {
header("Content-type: image/png");
imagepng($im);
} elseif (function_exists("imagegif")) {
header("Content-type: image/gif");
imagegif($im);
} elseif (function_exists("imagejpeg")) {
header("Content-type: image/jpeg");
imagejpeg($im);
} else {
die("No image support in this PHP server!");
}

?>
 

HraKK

Мудак
Команда форума
т.е. может ты его сначала рисуешь из сессии, потом генеришь новый и кладешь в сессию
Дальше тему прикрою, чтоб ты сам мог потренироваться находить ошибки.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху