基本的にいくつかのオプションがあります。
1)ランダムに見える単一の一意の識別子を作成し、対応するユーザー名でデータベースに保存します
2) ランダムなパスワードを生成し、ユーザー ID とパスワードをリンクに含め、パスワードをデータベースに保存します。
3) 一方向ハッシュ関数 (md5、sah1 など) と秘密の識別子を使用して、ユーザー識別子を暗号化します。暗号化されたユーザー識別子をデータベースに保存する必要はありません。
キーが既に存在するかどうかを確認するためにデータベースをチェックする必要があるため、オプション 1 は困難です。ただし、有効化するユーザー名が URL に含まれていないのは便利です。
将来、何らかのデータベースを使用してユーザー情報 (おそらく少なくともパスワード) を保存する予定がある場合は、オプション 2 を使用できます。データベースに別の列を追加するのにそれほど時間はかかりません。メールを送信するときは、ユーザー名と $key = sha1(rand(1, 99999) . $username) のようなものを、ユーザー名を含む行の別の列に保存します。次に、リンクをhttp://you.com/activation.php?user= $username&key=$key のようにします。activation.php では、キーがデータベースに保存されている値と等しいかどうかを確認します。
データベースで使用するストレージ スペースを減らしたい場合は、オプション 3 が有効です。$key = sha1($mysecret . $username) のようなものを秘密の識別子として使用できます。$mysecret として「aaafj_my_secret_adfaf」など、自分だけが知っている奇妙なものを使用します。オプション 2 と同じタイプの URL を使用します。ただし、$username のみに基づいて $key を生成できるため、保存する必要はありません。したがって、activation.php で処理しているときは、sha1($mysecret . $_GET[username]) == $_GET[key] かどうかを確認するだけです。存在する場合は、正しいユーザーを持っていることがわかります。理論的には、十分な数の登録があれば、誰かが $mysecret の値を割り出し、アクティベーション キーも生成することができます。ただし、それが何であるかを計算し始める前に、数十億以上の登録が必要になることに気付くでしょう。必要なアクティブ化の数は、ハッシュ関数のキー サイズに基づきます。$mysecret の値を推測しにくくするには、sha1 (160 ビット) と md5 (128 ビット) を使用します。