我有一个验证码生成器php脚本:
<?php
session_start();
header ("Content-type: image/png");
/*irrelevant parts here*/
$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;
imagepng($image);
?>
我在我的 HTML/PHP 页面中这样称呼它:
<?php session_start(); ?>
<!DOCTYPE html>
.. some irrelevant code here ..
<img id="captchaimg" src="captcha_generator.php">
这是我的javascript代码,它位于同一个HTML/PHP页面上(我通过单击按钮调用此函数(:
<script type="text/javascript">
function validCaptcha() {
var a = <?php echo json_encode($_SESSION['captcha_string']); ?>;
alert(a);
}
</script>
我的问题是javascript"迟到了",它获取会话变量的先前值,而不是实际值。我认为原因是当页面加载时,php 在 javascript 确实获取会话变量后运行。因此,javascript 看到的是上一个会话变量,而已经有一个新的会话变量。 如何在 javascript 函数中获取 ACTUAL 会话变量?
更新问题:javascript 函数何时获取会话变量?当页面加载或用户单击按钮时?
1.这里的问题是加载页面时只有变量 a= 会话值分配了会话值。
2.在这里,您将在加载页面并重新分配会话值后创建验证码。
3.In PHP 会话值都会更新。但在JS中没有。
一种替代解决方案是在单击按钮时发送 AJAX 调用并从 PHP 返回 session($_SESSION['captcha_string']( 值。这可以解决您的问题。
好的,我找到了解决方案。关键>>我必须创建一个新的 php 文件(在示例中称为 captchavalue.php(,该文件只有一个任务:回显变量:
<?php
session_start();
echo $_SESSION['captcha_string'];
?>
这是Ajax/Javascript(感谢您的建议(:
<script>
function validCaptcha() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("div_id").innerHTML = this.responseText;
}
};
xhttp.open("GET", "includes/captchavalue.php", true);
xhttp.send();
}
</script>