Kohana上验证码类的应用问题
我想实现的功能:通过AJAX传递参数对验证码进行验证操作过程:
1.页面通过以下代码实现验证码生成:
$captcha = new Captcha;
$date = array(
'captcha'=>$captcha->render()
);
$view = new View("reguser");
$view->date = $date;
$view->render(true);
2.生成具有验证码页的页面后,通过AJAX进行GET参数传递,传递参数后的验证代码如下:
function checkCode(){
$this->uri = new URI;
$result = $this->uri->segment('captcha');
$captcha = new Captcha;
$captcha->valid($result);
if($captcha->valid_count()>0){
echo "验证码通过";
$captcha->reset_count();
}else{
echo "验证码不通过";
}
}
现在问题来了,如果是第一次输入了正确的验证码,可以通过,反之,第一次输入错误,返回出错信息后,再次输入,就算你输入的是正确的,它也提示出错,是否每次建立一个 new Captcha就会重新生成一个新的验证码?因为我是通过AJAX进行验证的,所以页面上的验证码依然是第一次生成的,没变过。如果真是那样,有没有什么办法可以在保持第一次生成验证码不变的基础上进行多次验证呢? 在线等哦,希望知道的能说一下,不胜感激。 帮顶,我不是 Kohana 专家,呵呵。 继续等待中。。。。。。 解决方法如下:
因为每次生成一个 new Captcha 时都会自动生成一个新的验证码,所以,在第一次生成验证码后通过Ajax进行验证时,不要再用new Captcha重新生成,而是直接取第一次生成验证码时产生的Session值"captcha_response"进行验证,该值采用sha1进行了加密。
代码如下:
//验证码检验
function checkCode(){
$this->uri = new URI;
$result = sha1(strtoupper($this->uri->segment('captcha')));
if($result === Session::instance()->get('captcha_response')){
echo "验证通过";
}else{
echo "验证失败";
}
}
那什么时候生成新的验证码呢?
//验证码检验
function checkCode(){
$this->uri = new URI;
$result = $this->uri->segment('captcha');
$captcha = Captcha::instance();
$captcha->valid($result);
if($captcha->valid_count()>0){
echo "验证码通过";
$captcha->reset_count();
}else{
echo "验证码不通过";
}
}
这个版本如果还是不能满足你的要求,你可以使用szlinz 的解决方案,自己取session值来验证。Hex问的生成新的验证码时间,可以使用request::is_ajax(),来判断是不是页面首次加载或F5刷新来生成:
if(request::is_ajax())
{
//~取session值验证
}
else
{
//~new Captcha();
}
doutu 解答的很清楚,非常感谢!
页:
[1]