我正在构建一个表单+表单验证类,我还想为此添加验证码。 验证码图像正在显示,但它不会在$ _SESSION中存储任何内容。
我正在使用此验证码脚本:
https://github.com/gesf/captcha.class.php
现在我的控制器中使用了这个:
$data['regform']->addfield('user_captcha', 'Human verification', 'captcha', 'captcha' );
这会产生以下结果:
<label>
<span>Human verification</span>
<img name="user_captcha" src="http://www.websiteurl.com/dev/misc/captcha.php?c=1"><input type="text" name="user_captcha" value="" />
</label>
图像显示应该如此。但是我无法验证输入,因为它没有写入会话。现在在图像文件captcha.php中它加载了类Captcha,并在这个类构造函数中它尝试写入会话:
function Captcha($letter = '', $case = 5) {
$this->_capCase = $case;
if (empty($letter)) {
$this->StringGen();
} else {
$this->_capLength = strlen($letter);
$this->_capString = substr($letter, 0, $this->_capLength);
}
@session_start();
$_SESSION['asd'] = 'asd';
$_SESSION["CAPTCHA_HASH"] = sha1($this->_capString);
$this->SendHeader();
$this->MakeCaptcha();
}
我的会话始终为空。但是,当我尝试以下内容时:
<?php $_SESSION['bleh'] = 'asd'?>
<?php echo $form; ?>
它会像应该的那样为会话添加'bleh'。
我真的不明白为什么它不会写入会话..
有人可以帮帮我吗?
谢谢!
答案 0 :(得分:1)
确保在每个页面的任何输出之前调用session_start()。我可以看到,你正在使用@运算符,它会关闭一些错误。你可以删除它并告诉我们它输出了什么? 此外,您的sessiaon_start()调用位于脚本中间的某个位置。也许在此之前还有其他一些输出。