【问题标题】:Is it only by submitting the form that the session captcha can be get?是否只有提交表单才能获取会话验证码?
【发布时间】:2014-10-03 16:17:58
【问题描述】:

我想在表单的 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 范围内没有显示任何内容!那么如何获取验证码会话数据呢?

【问题讨论】:

    标签: php jquery session captcha


    【解决方案1】:

    这是因为会话的工作方式。

    当会话结束并且会话数据已写入会话文件时,会话值可用。

    在请求页面时,您实际上尝试获取尚未设置的会话值,原因有两个。

    1. 验证码图像在您的初始请求后加载,但 PHP 已经处理了 &lt;?php echo $_SESSION['securecode']; ?&gt; 部分。

    2. $_SESSION['securecode'] 值在图像加载后写入。

    所以基本上,您的解决方案是试图过早地读取值。

    解决方案?

    使用 AJAX 检查验证码或在下一次请求时验证验证码。

    【讨论】:

      【解决方案2】:

      Javascript 不能以这种方式运行 PHP。 PHP是服务器端语言,javascript是客户端语言。 或许this topic可以帮到你。

      【讨论】:

      • 只要在JS运行前session值存在就可以用JSON读取php变量
      • 可以,但是 JS 无法按照问题中描述的方式运行 PHP 脚本
      猜你喜欢
      • 1970-01-01
      • 2017-09-26
      • 2018-04-07
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 2015-10-13
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多