2012-02-11 41 views
-4

我維護農貿市場網站。該網站的一部分包括一個數據庫,其中包含所有不同的農民以及他們本週正在收穫的東西。密碼保護,同時跟蹤誰是誰

目前我有一組管理頁面,由於我沒有告訴任何人他們在哪裏,而被公衆隱藏。通過管理頁面,我可以根據需要編輯數據。隨着越來越多的農民參與其中,我們需要更新他們的數據,並且我想設置它,這樣每個農民都可以註冊,使用自己的密碼登錄並在本週沒有參與的情況下編輯他們在市場上的信息。

我已經看到了大量的密碼保護頁面的腳本。我所看到的那些已經成立了,這樣一旦用戶登錄,他們可以查看一切,似乎沒有成爲一個簡單的方法來跟蹤誰在簽署的。

如何建立密碼保護,同時跟蹤誰是誰,以便我可以即時構建自定義管理頁面?請記住任何提示或最佳做法?

感謝,

布蘭登 附:我一直在使用PHP和SQLite

+0

我不明白你的問題。你想要讓每個用戶都登錄並編輯他自己的信息更特別嗎? – 2012-02-11 13:10:08

+0

這是一個非常廣泛的問題,在這裏可能無法有效回答。聽起來好像你需要看CMS。你可以谷歌,並選擇一個適合。它會爲您節省一大筆重金。 – vascowhite 2012-02-11 13:11:56

+0

目前我有一個管理頁面,由於我沒有告訴任何人這個事實,這個頁面對公衆是隱藏的......大聲笑。你正在問麻煩的傢伙.... – itachi 2012-02-11 15:29:01

回答

0

請按照您在網上找到的這些腳本。

所有它歸結爲:

  • 註冊頁面來收集用戶的詳細信息,在節省檢查每個字段是有效的,同時檢查所有必填字段(即使用正則表達式來檢查電子郵件地址是有效的。)完成
  • 如果上述所有檢查出來,然後保存到數據庫後,你已經消毒的數據(我們不希望任何SQL注入吧!)
  • 我建議至少保存密碼作爲散列,所以請使用類似md5()的東西,我也會使用一個salt鍵(比如MD5($ password。$ salt)) - SALT可以是最短的當用戶註冊時,一串隨機的字母/數字(我推薦) - 並將其保存到數據庫中。
  • 當用戶登錄時,檢查數據,檢查用戶名是否存在,並抓取匹配條目的salt鍵,然後用SALT鍵MD5輸入密碼並查看字符串是否匹配
  • 將某種標誌保存到$ _SESSION,例如。$_SESSION['loggedin'] = true;然後在每個受保護的頁面的頂部,你可以在例如做一些像下面
  • 你也可以再保存時間戳(time())或日期時間(date("Y-m-d H:i:s"))到數據庫中標記last_logged_in

一欄下我知道這是不是一個代碼負載,但它形成了一個基本的指南,讓你開始

例以上

if($_SESSION['loggedin'] !== true){ 
    header("Location: login.php"); 
    exit; 
} else { 
    // rest of protected page 
} 
+0

謝謝你非常清楚待辦事項列表,這將有很大的幫助。我需要跟蹤誰在保持安全的情況下進行哪些會話?我在猜測,我應該做的不僅僅是在會話中將用戶ID分配給會話中的變量,然後在切斷頁面之前檢查該變量?或者它真的很簡單嗎? – Brandan 2012-02-11 17:50:21

+0

在會話中存儲類似用戶ID的東西也是一個好主意,以及令牌(在數據庫和用戶登錄的每個會話中生成並存儲新的令牌) - 然後,您可以將用戶ID與如果令牌不匹配 - 爲了安全防範,將用戶自動註銷。還有其他一些細微的東西可以添加,例如超時(因此將最後一個操作作爲時間存儲在數據庫中,如果時間過長,則自動將用戶註銷)。如果這有幫助,隨時打勾它作爲答案:) – MrJ 2012-02-11 19:00:32

0

確保每個用戶都有唯一的登錄(最好是電子郵件)和密碼。然後創建一個帶有2個用戶名和密碼輸入字段的表單,並在回發之後,將值與數據庫進行匹配。如果數據匹配,請將user_id(或更多用戶數據)存儲在會話中。

0

爲了找出誰是誰,我會使用會話($ _ SESSION變量)

做一些簡單的登錄頁面,設置一些id或使用電子郵件作爲登錄,如果你想你可以做一些註冊頁面。

使用隨機字符串作爲用戶的密碼,將其發送給他們並告訴他們在首次登錄時更改密碼。

請勿在數據庫中存儲密碼。只使用密碼散列(例如sha512)。如果您想提高安全性,請使用某些服務器鹽或用戶鹽。 在每次登錄時比較用戶輸入的口令密碼以及存儲在數據庫中的密碼。 注意SQL注入漏洞,我會建議使用PDO並插入變量作爲參數。

0

您可以使用Basic HTTP-Auth或根據Sessions建立自己的。在這兩種情況下跟蹤用戶都非常簡單(分別爲唯一名稱和會話ID)。