Переменная сеанса всегда загружает страницу в php? - PullRequest
1 голос
/ 26 ноября 2010

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

<?php

session_start();

$captchaStr = md5(microtime() * mktime());
$captchaStr = substr($captchaStr,0,5);

$_SESSION["captcha"] = $captchaStr;

$captcha = imagecreatefrompng("../images/captcha.png");
$black = imagecolorallocate($captcha, 154, 32, 242);
$line = imagecolorallocate($captcha, 233, 239, 239);

// Draw lines
imageline($captcha, 0, 0, 39, 29, $line);
imageline($captcha, 40, 0, 64, 29, $line);

// Add captcha text
imagestring($captcha, 5, 20, 10, $_SESSION["captcha"], $black);

header("Content-type: image/png");
imagepng($captcha);

?>

Кто-нибудьесть идеи почему это и как это исправить?

ура

1 Ответ

3 голосов
/ 26 ноября 2010

Я предполагаю, что вы пытаетесь прочитать значение капчи со страницы, содержащей значение капчи, что-то вроде этого:

<?php session_start(); ?>

<img src="/lib/captcha.php" />

<?php echo "Captcha is: ", $_SESSION['captcha'] ?>

Это никогда не сработает. По умолчанию PHP блокирует файл сеанса, поэтому ваш сценарий капчи не может быть запущен, пока не завершится выполнение вышеупомянутой страницы контейнера. Кроме того, поскольку капча выбирается как отдельный вызов, браузер пользователя должен инициировать обратный вызов на сервер, чтобы получить изображение. Это займет порядка секунд, в то время как страница контейнера будет сделана в течение микросекунд.

Другими словами, сценарий генератора капчи, скорее всего, НИКОГДА не запустится, пока не завершится сценарий контейнера, а это означает, что сценарий контейнера никогда не увидит новую строку кода в файле сеанса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...