2011-02-06 42 views
2

我實際上是使用PHP創建Web應用程序並尋求幫助驗證用戶。 與某些網站一樣,當您註冊時,會通過確認鏈接向您發送電子郵件。我如何在PHP中實現? 我所知道的是,我必須使用PHP mail()函數來發送電子郵件。 請幫忙。必要。謝謝。 :)通過PHP中的電子郵件驗證用戶

回答

1

就像CSRF保護您生成一個唯一的令牌。

$token = md5(uniqid(rand(), TRUE)); 

你在你的會話值存儲電子郵件和當用戶點擊電子郵件中的鏈接(您通過query-string通過令牌)你比較兩個值。

爲了讓它更安全,您可以像CSRF一樣添加時間限制。

3

這是一個很廣泛的問題,所以我們只能給出一個廣泛的答案,但總的技術這樣做是

  1. 插入用戶的電子郵件地址到你的數據庫,但它標記爲未驗證
  2. 創建一個唯一的註冊密鑰並將其插入到不同的表只是這些鍵
  3. 發送電子郵件到用戶的電子郵件地址,並鏈接到你的網站,通過這個註冊碼作爲參數(如http://site.com/confirm.php?key=1234
  4. 當該網址是可見的將其標記爲已驗證的電子郵件並刪除臨時創建的註冊密鑰
+0

謝謝帕特里克。這有很大的幫助。你們三個人(喬,你們和阿爾弗雷德)都給了我真正「廣泛」問題的完整解決方案。乾杯。保持聯繫。 :) – ikartik90 2011-02-09 18:36:04

+0

你怎麼知道這是訪問該網址的用戶?或者,是否爲每個用戶提供了唯一的網址? – ggkmath 2012-05-11 04:52:39

+0

@ggkmath因爲第2步,「創建一個唯一的註冊碼」。如果你使用連續數字,確定它可能讓某人猜測序列中的下一個數字,但如果你做了一個類似於隨機數的md5總和,沒有人會猜測這個數字。 – Patrick 2012-05-11 12:12:46

7

帕特里克斯的回答是正確的,儘管我想指出還有其他的可能性!

您不必在數據庫中創建並存儲唯一標記。這是僅需要一次的數​​據開銷。

你也可以利用單向哈希。

例如發送用戶代碼md5('my-secret-application-token'.$user_email_adress)

您可以通過同樣的方式進行驗證,但不需要存儲密碼。