2012-04-02 129 views
0

下面的代碼產生結果「我不明白這一點」。任何想法爲什麼?如果兩個字符串的長度相同,從第一個字符開始匹配,並且實際上在視覺上相等,爲什麼它們與相等運算符不相等?PHP字符串不等於但是strpos和長度相同

$userid = (int) $_POST['username']; 
$password = trim($this->input->post('password')); 
$hashed = trim(md5($password . $this->salt)); 
$success = false; 
if($this->users[$userid]->password == $password) { 
    $success = true; 
} 
else { 
    if(strpos($hashed, $this->users[$userid]->password) === 0 && 
     strlen($hashed) == strlen($this->users[$userid]->password)) { 
     echo "I don't understand this"; 
    } 
} 

在回答這個問題時,請忽略使用md5散列密碼的可取性。

用途PHP5.3.2

回答

1

我在想你將密碼存儲爲散列?您需要將用戶的密碼與哈希值進行比較,而不是密碼本身。

更改此:

if($this->users[$userid]->password == $password) { 

這樣:

if($this->users[$userid]->password == $hashed) { 
+1

哦<插入咒罵這裏>!愚蠢的疏忽。我一直盯着這裏一個小時,看不到那個。謝謝。 – Djehuty 2012-04-02 17:20:46

相關問題