我试图将令牌创建为用户唯一的引用,因此我使用md5生成了令牌。但是,我听说有重复的可能性。然后,每次按以下方式生成令牌时,我都尝试先检查令牌,然后再将其插入数据库。
控制器
private function generateToken(){
$token = strtoupper(md5(rand()));
$sql = 'SELECT id, token FROM UserReferral WHERE token != '.$token;
$is_exist = $this->Database_model->readOneQuery($sql);
if(!empty($is_exist)){
// Insert data into database
} else {
$token = strtoupper(md5(rand()));
// check database again to see if the token is already exist
}
}
模型
function readOneQuery($sql){
$r = $this->db->query($sql)->row_array();
return !empty($r) ? $r : false;
}
如果我这样做,检查似乎无止境。有什么更好的方法可以用来进行数据检查吗?
答案 0 :(得分:-1)
MD5较旧且不安全:https://security.stackexchange.com/questions/19906/is-md5-considered-insecure
请考虑使用安全性更高的产品,例如SHA或什至更好的产品, password_hash :http://php.net/manual/en/function.password-hash.php