[英]Captcha validation error in codeigniter
我发现了有关验证码验证表单的问题,有关详细信息,请在此处显示我的代码:
验证码功能
private function gbr_captcha()
{
$vals = array(
'img_path' => './captcha/',
'img_url' => base_url().'captcha/',
'font_path' => './system/fonts/impact.ttf',
'img_width' => '150',
'img_height' => 40
);
$cap = create_captcha($vals);
$datamasuk = array(
'captcha_time' => $cap['time'],
'word' => $cap['word']
);
$expiration = time()-3600;
$this->db->query("DELETE FROM captcha WHERE captcha_time < ".$expiration);
$query = $this->db->insert_string('captcha', $datamasuk);
$this->db->query($query);
return $cap['image'];
}
验证码验证表
if(empty($cek))
{
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_rules('captcha', 'Captcha', 'trim|required');
if ($this->form_validation->run() == FALSE)
{
$frm['gbr_captcha'] = $this->gbr_captcha();
$this->load->view("app_admin/login/index",$frm);
}
else
{
$u = $this->input->post('username');
$p = $this->input->post('password');
$this->app_model->getLoginData($u,$p);
}
}
可以在我的网站上显示验证码,但是要验证用户输入的验证码正确与否,这是行不通的,我认为我的问题来自验证,如果有任何建议可以修复我的代码,请分享,谢谢。
您正在将以下数据存储到数据库中
$datamasuk = array(
'captcha_time' => $cap['time'],
'word' => $cap['word']
);
恕我直言,没有什么可以识别用户的身份(例如ip地址)。 您将无法获取已经生成并存储的文本进行比较。 因为您没有指向用户的任何内容。
选项1:存储更多信息,例如ip地址,以及当您尝试验证验证码时,询问数据库该ip地址是否存在任何记录。
选项2:将验证码存储在类似的会话中
$this->session->set_userdata("captcha", ["expires"=> time()+3600, "data" => captcha_string])
这种方式更容易验证(至少对我而言)。
我希望它足够清楚。
我认为您在验证码中应该有一个回调函数来验证它是否正确。
$this->form_validation->set_rules('captcha', 'Captcha', 'trim|required|callback_checkCaptcha');
function checkCaptcha($word){
$ip = $this->session->get_userdata("ip");
//check db/query db if the captcha word is correct
$sql = "SELECT id FROM captcha WHERE word = {$word} and ip={$ip}"
//return true or false if word exists or not
}
其次,您如何确定它是正确的验证码? 您可以存储用户的IP地址,或设置Cookie /会话
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.