簡體   English   中英

如何檢查密碼?

[英]How do I check the password?

最近發現我的登錄處理程序中存在問題。 事實是,即使輸入的密碼正確並且與數據庫中的密碼匹配,腳本仍然會將我發送到錯誤頁面。

session_start();
include ("db.php");

 if (isset($_POST['login'])) {                                     
        $login = $_POST['login']; 
        $login = stripslashes($login);
        $login = htmlspecialchars($login);
        $login = trim($login);
        if ($login == '') {
            unset($login);
            } 
            } 

        if (isset($_POST['password'])) {
        $password=$_POST['password']; 
        $password = stripslashes($password);
        $password = htmlspecialchars($password);
        $password = trim($password);
        $password = hash("md5",$password); 
        if ($password =='') {
            unset($password);
            }
            }


if (empty($login) or empty($password)) 
    {
    exit (header('location:index.php'));
    }

$result = mysql_query("SELECT * FROM users_data WHERE login='$login'");

    $row = mysql_fetch_array($result);

    if (empty($row['password']))
    {
    exit (header('location:mistake.php'));
    }
    else {

    if ($row['password']==$password) {

    $_SESSION['login']=$row['login']; 
    $_SESSION['users_id']=$row['users_id'];
    header('location:first.php');

    }
    else {

        header('location:mistake.php');



    }
    }

HTML形式:

<form action="login.php" method="post" class="login">



<label><span>Login:</span>
<input name="login" type="text" size="20" maxlength="100">
</label>




<label><span>Password:</span>
<input name="password" type="password" size="20" maxlength="100">
</label>



<p>
<input type="submit" name="submit" class ="submit" value="Login">
</p>

UPD:謝謝您的回答,終於找到問題所在了-我剛剛在數據庫中指定的密碼值長度不足。

首先,為什么將密碼存儲在數據庫中而不散列密碼(例如md5)。

如果這樣做,則無需處理密碼,您只需將存儲的md5(password)與用戶發布的密碼的md5哈希值進行比較即可。

另外,由於編碼的原因,很可能會將您重定向到mistake.php頁面而不是success.php頁面。

如果您向我們提供了用於測試代碼的密碼(假設您正在測試它;;)),這將有所幫助。

干杯!

編輯:請查看更好的加密技術,如@jayblancard在以下評論中所建議。

嘗試使用isset()代替空

if (isset($row['password']))
  1. 我只是建議您嘗試調試代碼,錯誤地在多個地方調用了DOT php,因此請使用die("die message")來查看哪個被解雇了。

  2. 由於您沒有對代碼進行測試,因此請調試有效和無效輸入的輸出並檢查輸出。

  3. 對輸入和輸出感到滿意后,檢查條件是否像以前那樣使用模具條件,是否表現出預期的效果。

注意:你的代碼是凌亂看看這個瘦基礎知識

也看一下OO編程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM