上次说到验证码的更换,这次来说说thinkphp的验证码的验证
生成的验证码信息会保存到session中,包含的数据有:
array('verify_code'=>'当前验证码的值','verify_time'=>'验证码生成的时间戳')
而生成的session字段为:
Array ( [d2d977c58444271d9c780187e93f80e5] => Array ( [verify_code] => e72b775a0af3a2d779372a1ecf7e6977 [verify_time] => 1408370351 ) [name] => tony )
谁能告诉我这么一长串的东西是什么啊?叫我怎么用啊?
手册上说可以用内置的函数check验证,找到这个函数:
/**
* 验证验证码是否正确
* @access public
* @param string $code 用户验证码
* @param string $id 验证码标识
* @return bool 用户验证码是否正确
*/
public function check($code, $id = '') {
$key = $this->authcode($this->seKey).$id;
// 验证码不能为空
$secode = session($key);
if(empty($code) || empty($secode)) {
return false;
}
// session 过期
if(NOW_TIME - $secode['verify_time'] > $this->expire) {
session($key, null);
return false;
}
if($this->authcode(strtoupper($code)) == $secode['verify_code']) {
$this->reset && session($key, null);
return true;
}
return false;
}
很明显这个: $key = $this->authcode($this->seKey).$id;
就是存验证码信息的数组索引号,但我现在还不怎么明白,得,先用这个函数实现吧
ajax提交:
<span style="white-space:pre"> </span>var data = 'code='+Vverify;
$.post(appPath + "/Register/checkVerify",data,function(data){
if(data.status == 1){
$("#verifyResult").html("");
}else{
$("#verifyResult").html("<font color=red>*</font>");
}
});
验证函数:
<span style="white-space:pre"> </span>public function checkVerify(){
$code = $_POST['code'];
$id = "";
$verify = new \Think\Verify();
$result = $verify->check($code, $id);
if($result){
$data['status'] = 1;
$data['content'] = '正确';
$this->ajaxReturn($data);
}else{
$data['status'] = 0;
$data['content'] = '失败';
$this->ajaxReturn($data);
}
}
测试可以将ajax信息输出~