Php codeigniter中的验证码验证错误
我发现我的验证码验证表单存在问题,有关更多详细信息,请参见我的代码: 验证码功能Php codeigniter中的验证码验证错误,php,codeigniter,Php,Codeigniter,我发现我的验证码验证表单存在问题,有关更多详细信息,请参见我的代码: 验证码功能 private function gbr_captcha() { $vals = array( 'img_path' => './captcha/', 'img_url' => base_url().'captcha/', 'font_path' => './system/fonts/impact.ttf',
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'];
}
在我的网站上显示验证码是有效的,但要验证用户输入的验证码是否正确,它不起作用,我认为我的问题来自我的验证,如果有任何建议来修复我的代码,请分享,谢谢..您正在将以下数据存储到数据库中
$datamasuk = array(
'captcha_time' => $cap['time'],
'word' => $cap['word']
);
IMHO没有标识用户的任何内容(如ip地址)。您将无法获取已生成和存储的文本进行比较。因为你没有任何指向用户的东西
选项1:存储更多信息,如ip地址,当您尝试验证验证码时,询问数据库是否有ip地址的任何记录
选项2:将验证码存储在会话中,如
$this->session->set_userdata("captcha", ["expires"=> time()+3600, "data" => captcha_string])
这样更容易验证(至少对我来说)
我希望它足够清楚。您正在将以下数据存储到数据库中
$datamasuk = array(
'captcha_time' => $cap['time'],
'word' => $cap['word']
);
IMHO没有标识用户的任何内容(如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地址,或者设置cookies/session我认为您的验证码中应该有一个回调函数来验证它是否正确
$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地址,或者设置cookies/sessionHmm,我看不到您询问数据库是否存在验证码的部分。检查这里:那么,我应该向代码中添加什么?你能给我一些参考资料吗?你问的不清楚。请再澄清一下嗯,我看不到你问数据库是否有验证码的部分。检查这里:那么,我应该向代码中添加什么?你能给我一些参考资料吗?你问的不清楚。请再清理一下