ユーザーがサインアップするPHPWebサイトを作成していますが、「電子メール確認」コードのベストプラクティスについて疑問に思っています。
新規ユーザーは自分のメールアドレスを確認する必要があります。これを行うには、コードを生成してユーザーにメールで送信します。このコードを使用して、アカウントをアクティブ化できます。このキーをデータベースに保存するのではなく、便利な小さな回避策を使用しています。コードは次の結果です。
md5("xxxxxxxxx".$username."xxxxxxxxxxx".$timestamp."xxxxxxxxx");
ここで、$timestampはユーザー作成時間を指します。全体的にはとても満足していましたが、それで考え始めました。これで十分安全ですか?そして、衝突の可能性はどうですか?また、パスワードリセットなどのコードを生成する必要があります。同様の方法を使用した場合、衝突により、あるユーザーが別のユーザーのパスワードを誤ってリセットする可能性があります。そして、それは良くありません。
では、これらのことをどのように行いますか?私の考えは次の形式の表でした:
codePK (int, a-I), userID (int), type (int), code (varchar 32), date (timestamp)
「type」は1、2、または3で、「アクティベーション」、「メール変更」、「パスワードリセット」を意味します。これはそれを行うための良い方法ですか?もっと良い方法はありますか?
上記と同様の方法を使用して、cronジョブを使用せずに2日以上経過したものを自動的に削除できますか?私のホスト(nearlyfreespeech.net)はそれらをサポートしていません。可能であれば、外部ホストでcronジョブを実行することは避けたいと思います。これは、物事を削除するスクリプトであるwgetです。これは、厄介な=Pです。
ありがとう!
マラ
更新:
明確にするために:このタスクを安全かつ安全に実行する唯一の方法は、データベースを使用することです。これは、元の関数が回避しようとしていたことです。私の質問は、テーブル(または複数のテーブル?)をどのように構成するかについてです。誰かが私がcodePKを廃止し、コードをPKにすることを提案しました。要するに、私の質問は、これはあなたがしていることですか?