ユーザー認証システムを作成しており登録システムに最近入りかかりました。しかしメールアドレスをチェックするような機能がなかなかできません。
具体的にはIDやパスワード、メールアドレスを入力してもらいます。その後メールアドレス先に確認メールを送り、メールにあるランダムなURL(register_check.php?id=237uhuiedy78y7vbyc3 のようなもの)をクリックすることによって初めてIDが有効になるシステムを作り上げたいと思っています。
どのような感じで構成すればいいのでしょうか?
>>>実際にソースなどを書いていただくと助かります。<<<
(ユーザー情報等はデータベース(Mysql)にて管理しています。)
http://odn.okwave.jp/kotaeru.php3?q=716090
ODN@OKWaveコミュニティー Webサイトの会員仮登録について
※超手抜き回答です。URL参照下さい。
ANo.#2
参照ヨロ
ココでソースを書くと半角ダブルクォーテーションが全部全角に化けますので。
http://e-words.jp/w/E382B9E382ADE383BCE3839E.html
スキーマとは 【schema】 ─ 意味・解説 : IT用語辞典 e-Words
データベースのカラム名くらい書いてもらわないと「実際に(動く)ソース」なんて書けましぇん
usr(id,pwd,mail,key,st)のようなテーブルとして(idが主キー、stは状態:0は無効1で有効、など)。
フォームから$id、$pwd、$mailを取得。
↓
$keyを適当に生成して、
$sql = ”INSERT INTO usr(id,pwd,mail,key,st) VALUES(’{$id}’,’{$pwd}’,’{$mail}’,’{$key}’,0)”;
を実行
↓
$mail宛に、url(”register_check.php?id={$key}”)を含むメールを送る
↓
register_check.phpでは
$key = $_GET[’id’];
$sql = ”UPDATE usr SET st=1 WHERE key=’{$key}’”;
を実行
↓
あとはログインの時に条件st>0をつける
当然、$mailはあり得ないメアドではないか?とか各フォームの値のサニタイズは必須です。
なるほど、そういう方法がありますね。
試してみたいと思います。ありがとうございます。
Yahoo! JAPAN
URLはダミーです。
大まかな流れですが、
ユーザが ID , パスワード を入力してフォーム送信
↓
フォームの内容に問題なければ、このタイミングでデータベースに登録してしまう
↓
データベースの内容をもとに URL を作成して sendmail
↓
ユーザがそれをクリックしたら、データベースに「このIDは本物」の情報を付けて、完了。
ということで良いのでしょうか。
------------------------
register.html の内容
<form method=”POST” action=”register.php”>
<dl>
<dt>ユーザID</dt><dd><input name=”userid” /></dd>
<dt>パスワード</dt><dd><input type=”password” name=”password” /></dd>
<dt>メール</dt><dd><input name=”email” /></dd>
</dl>
<input type=”submit” value=”メールを受け取る” />
</form>
------------------------
register.php の大まかな内容
<?php
if(過不足があったり、MySQLのデータの誰かと内容が被っている){
print ”もう一度入力してちょ”;
}else{
$id = sha1( $_POST[’userid’].$_POST[’password’] ) . sha1( $_POST[’email’] );
MySQLに登録;
sendmail などをする; ( body に ”http://hogehoge.com/register_check.php?id=$id” )
if(問題なく登録とか送信とかできた){
print ”メールを送信したよん”;
}else{
print ”メンテナンス中だよん”;
}
}
?>
------------------------
register_check.php の大まかな内容
<?php
if(isset($_GET[’id’])){
if( MySQL から ID を探して $_GET[’id’] がある ){
データベースで本登録状態にする。
print ”登録完了”;
}else{
print ”不正なアクセスですか・・?”;
}
}
?>
------------------------
MySQLで作っておくデータベース
通し番号
ユーザID
パスワード
メールアドレス
$id
------------------------
あまりにも端折ってしまいましたが、あとはサニタイジングなどに注意を払ってカスタマイズをしていけば完成すると思います。
「 データベースで本登録状態にする。」を質問しております。。。
http://www.stackasterisk.jp/tech/php/php03_06.jsp
PHP��3���FPHP���p(�Z�b�V�����Ǘ�/�F��)
趣旨は異なりますが、セッションIDを使ったユーザ認証の例です。
session_id()に、ランダムな文字列が自動的に取得されるので、それを、
varchar2 USER_ID;
varchar2 PASSWORD;
varchar2 MAID_ADDRESS;
varchar2 SESSION_ID;
char IS_CERTIFIED DEFAULT=”0”; // 0=未認証 1=メール認証済み
といった感じのテーブルに格納しておき、ユーザへ送る確認メール中に、セッションIDを引数として渡しておきます。(ご質問中のランダムなURLに該当する部分です)
そして、register_check.php中で、メールアドレスとセッションIDが合致した場合のみ、認証済みフラグを立てユーザIDを有効とするような処理を書けば実現出来るかと思います。
データベースに 0 か 1 を入力させて未認証か、認証済みか判断するとありますが、ログイン機能に対してどのようにして1が認証済みと認識させればいいのでしょうか?疑問です。
http://dev.mysql.com/doc/refman/4.1/ja/
MySQL 4.1 リファレンスマニュアル
2度目の解答
私の一度目の解答のusr(id,pwd,mail,key,st)と同じテーブルだとして。
認証に必要なのはidとpwd。これを入力してもらい、以下のSQLで引っかかってきたら認証OK、来なければ未認証か未登録。
$sql = ”SELECT * FROM usr WHERE st>0 AND id=’{$id}’ AND pwd=’{$pwd}’”;
st>0が認証済みのみの条件です
SQLはご存じですか?先にSQLの勉強をされてはいかがでしょうか
SQLは多少理解しています。回答ありがとうございました。
http://jp.php.net/manual/ja/function.uniqid.php
PHP: uniqid - Manual
回答2の方の方法がベストだと思います。
補足として、ユニークIDの取得方法です。
参考までにどうぞ。
なるほど、これでランダムな文字を生成するのですね。
残念ながら動きませんでした。。。