我創建一個PHP的網站,該網站包括用戶註冊,和我想知道的「確認電子郵件」代碼的最佳做法。通過生成代碼,並在一封電子郵件中,他可以再使用,以激活其賬戶將其發送到用戶我做到這一點 -最佳做法電子郵件確認代碼
新用戶必須確認他們的電子郵件地址。而不是存儲在數據庫中這一關鍵,我使用一個方便的小解決辦法:代碼的結果是:
md5("xxxxxxxxx".$username."xxxxxxxxxxx".$timestamp."xxxxxxxxx");
其中$時間戳是指用戶創建時間。總的來說,我對此很滿意,但後來我開始想,這足夠安全嗎?那碰撞的可能性呢?我還需要生成密碼重置代碼等。如果我使用了類似的方法,碰撞可能會導致一個用戶無意中重置另一個用戶的密碼。這並不好。
那麼,你如何做這些事情?我的想法是以下格式的表:
codePK (int, a-I), userID (int), type (int), code (varchar 32), date (timestamp)
其中「類型」是1,2或3,意思是「激活」,「電子郵件變」或「密碼重置」。這是做這件事的好方法嗎?你有更好的方法嗎?
使用類似上述的方法,可能我會自動刪除任何超過兩天老不使用的cron的作業?我的主機(almostfreespeech.net)不支持它們。如果可能的話,我想避免在外部主機上執行cron-job,而wget是一個刪除內容的腳本,因爲這只是messy = P。
謝謝!
麻辣
更新:
爲了澄清:我已經意識到可靠而安全地去了解這個任務的唯一方法是使用一個數據庫,這是原函數試圖避免。我的問題是如何構建表(或多個表)。有人建議我不要使用codePK,只需將代碼設爲PK即可。所以總之,我的問題是:這是你做的?
電子郵件確認代碼的最佳做法?讓他們離開... – Leo 2010-01-09 13:52:20
用戶在文件上有一個有效的電子郵件地址是很重要的,如果僅用於密碼重置。雖然人們可以聲稱「這是用戶的責任」,但這是我們正在處理的真實世界......只要第一個「永遠不會忘記密碼」的人忘記密碼,大概一到兩週後,我的系統將是「最愚蠢的」。 – Mala 2010-01-10 12:49:30