phpでメール認証

メール認証は会員登録などで使用されています。

会員登録は作りませんがメール認証を作ってみます。

メール認証で使われるのはキー(ランダムな数字)が多いので

mt_rand()

を使います。

または、暗号学的にセキュアな方法でしたい場合は

random_int()

がいいです。

キーの保存場所

今回はセッションに保存しようと思います。(セッション以外にもデータベースに保存もあり)

$_SESSION['key'] = mt_rand();

セッションにkeyという形でランダム数を入れます。

メール送信ですが

$key = mt_rand();
$_SESSION['key'] = $key;
$email = $_POST['mail'];
$title = 'キー';
$contents = <<< EOM
キー番号
$key
EOM;
$header = 'MIME-Version' = '1.0';
$header .= 'Content-Type' = 'text/plain; charset=ISO-2022-JP-ms';
$header .= 'X-Priority' = '3';
$header .= 'From' = 'info@local';
mb_send_mail($email, $title, $contents, $header);

$headerは書き方があってるのかは分かりません。
ミスってるかもしれません。

こんな感じで送信します。

$headerは任意です。

キーが合っているか確認

if($_SESSION['key'] === $_POST['key'])

if文でキーが合っているかか確認します。

全体図

$key = mt_rand();
$_SESSION['key'] = $key;
$email = $_POST['mail'];
$title = 'キー';
$contents = <<< EOM
キー番号
$key
EOM;
$header = 'MIME-Version' = '1.0';
$header .= 'Content-Type' = 'text/plain; charset=ISO-2022-JP-ms';
$header .= 'X-Priority' = '3';
$header .= 'From' = 'info@local';
mb_send_mail($email, $title, $contents, $header);
if($_SESSION['key'] === $_POST['key']){
//keyが合っている場合の処理
}else{
//keyが合っていない場合の処理
}

キーはランダム英数字にすることはできます。

md5(uniqid(mt_rand(), true));

に変えたらいけますがそこまでキーを複雑にする必要はないと思います。

セッションを削除する場合は

//全てのセッションを削除の場合は
$_SESSION = array();
session_destroy();
//一部のセッションを削除する場合は
unset($_SESSION("key"));
session_destroy();

メール認証なので多分一部のセッションを削除を使用する方が多いと思います。

この記事が良かったら、シェアしてね!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です