2012-07-05 160 views
0

我是新來的PHP,如果可能的話,想要一些信息。 我目前正試圖在我的大學中建立一個excersise的網站。最佳登錄方式?

我的主要問題是哪個是最好的或更專業的方式來創建登錄腳本(注:只有一個用戶,管理員將有權訪問)???

  • 第一種方法是檢查表單中發佈的數據(如果它們與 中的那些數據庫中的表「admin」中的數據匹配)。所以我必須要通過一個腳本,這樣在我的數據庫中創建表,並添加一個用戶只有管理員,然後用一個SQL查詢檢查比賽
  • 或第二:

    if(($_post['username'] == 'admin') && ($_post['password'] == 'password')){ 
        echo "Welcome admin"; 
    }else{ 
        echo "No access"; 
    } 
    
+3

通常前者 - 在編程時我們試圖避免_hardwiring_,因爲它被認爲是不靈活的。對於登錄系統,儘量避免以純文本形式保存密碼(查找_hashing_和_salting_),並確保您沒有_SQL injection_漏洞。 – halfer 2012-07-05 14:33:56

回答

0

總是更好如果你在數據庫中有你的數據,在這種情況下,你應該加密你的用戶數據。

0

你當然不應該在你的代碼中存儲密碼和管理員用戶名。數據庫是這種數據的更安全和可靠的存儲。

如果您有一個用戶表,那麼您可能有一個字段指示用戶權限級別,或者您甚至可能擁有一個具有權限的單獨表。在這種情況下,您可以擁有一個特權並將其分配給某個用戶(如您所願,可以是一個或多個用戶)。

0

當然第一。在任何時候,您都可以添加一些用戶,而不是通過更改源代碼,而是通過在數據庫中添加條目。請注意,有時我們暗示只有一個用戶可以訪問,但是在我們注意到另一個用戶必須有權訪問之後。最好做到可擴展。

2
+0

實際上,您可以使用多個用戶來完成此操作。 – kapa 2012-07-06 01:13:26

+0

確實如此,編輯答案 – matino 2012-07-06 06:42:31

+0

+1在像OP這樣的情況下,這是一個專業且簡單的解決方案。在PHP(和MySQL)中正確編寫身份驗證系統是一項非常先進的任務。 – kapa 2012-07-06 08:39:20

2

何不做一個users表?在該表中,一個字段可以被命名爲「管理員」,其中「0」表示不是管理員,「1」表示管理員。

對於密碼,你總是會想要使用某種散列:http://php.net/manual/en/function.hash.php

然後,檢查登錄憑證時,你可以做

if(!empty($_POST['password'] && hash('sha256', $_POST['password']) = {database password} ){ 
    // password's okay 
} 
  • 從未明文/無鹽密碼存儲在數據庫中。

注意:您的數據庫「密碼」將是哈希值/鹽值,而不是實際的密碼。

+3

我知道這是家庭作業,但如果這是真實的情況,我會說「從不在數據庫中存儲未加密的密碼」 - 因爲各種知名網站都在發現他們的成本! – halfer 2012-07-05 14:39:28

+0

+1非常好的建議 – Don 2012-07-05 14:40:43