• ベストアンサー

Webサイトの会員仮登録について

Webサイトを構築したいのですが、会員登録機能で実現方法がわからないところがあります。 一般的なWebサイトの会員登録作業は以下のような流れになると思います。 1.会員登録フォームから情報入力 2.サーバから入力アドレスへメール送信 3.メールのURLへアクセス 4.会員登録完了 2のメールには、あるページのURLと何かのID番号がついていますが、これをどうやって1.で入力した会員とつなげるのでしょうか? 開発言語はPHPです。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

会員情報データベースを介して認証すると良いでしょう。 1.では、フォームから入力したデータをデータベースに書き込む際に、自動生成した会員番号と一緒に、ユニークな認証コード文字列を生成し、データベースに書き込みます。この時、メール認証を済ませたかどうかのフィールドも用意し、1の時点では「未認証」の状態で書き込みます。あと、フォームから入力された希望アカウント名、パスワードも、ここで書き込みます。 例えば、認証コード文字列は「3d674a7b21f5749f5756f7ab3cd69d12」などのように、他と重複しない、完全なランダム文字列にします。他と重複しているかどうかは、会員情報データベースから検索し、その認証コード文字列がデータベースに既存かどうかで調べる事になるでしょう。 2.では、メール送信の際に、認証ページのURLを送信しますが、この認証ページのURLに、1で生成した認証コード文字列を含めます。実際には、1と2の処理は同時に1つのCGIで行う事になるでしょう。 3.では、アクセスされたURLを元に、URLから認証コード文字列を取り出します。その認証コード文字列で会員情報データベースを検索します。そして、最終的な認証画面に進む際に、1で入力させたアカウント名、パスワードを再度入力させ、データベース上のアカウント名、パスワードと一致した場合のみ、データベースのメール認証を済ませたかどうかのフィールドを「認証済」に変更します。 なお、定期的にデータベースのメール認証を済ませたかどうかのフィールドを検査し、仮登録から一定期間を過ぎても「未認証」のままの場合、そのレコードをデータベースから削除します。

noname#156053
質問者

お礼

回答ありがとうございます。 私はセッションIDを利用してやるのかな?でも、どうやってやるのだろう?っと、悩んでおりました。 データベースを利用してやれば、良いんですね。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.2

No1さんので正解は出てますが、昔Webゲームを作ったとき、こんなのやりまし。 ソースを探したらでてきたので、該当部分を貼り付けます(笑) 昔のもので、でたらめですが、何かのお役に立てれば幸いです。 なお、これはsession_register =on の環境でコーディングしています。 そのあたりもご注意ください。 なおデバックをした記憶がありません(; ̄Д ̄)!   case "confirm":     $val=$_POST["val"];     for($i=0;$i<sizeof($val);++$i) {       $val[$i]=htmlspecialchars($val[$i]);     }     $val[2]=mb_convert_kana($val[2]);     session_register("val");     print_header("新規ユーザー登録確認",$bc);     create_user_check($val,"./create_user.htm","on");     $res=pg_query("select * from s_spe where id='$val[3]'");     $spe=pg_result($res,0,"name");     for($i=2;$i<=9;++$i) {       $mt=mt_srand((double)microtime()*1000000);       $p=mt_rand(700,1200);       $j=$i-2;       $pow[$j]=number_format(pg_result($res,0,$i)*$p/500);     }     pg_freeresult($res);     $pow[0]=$pow[0]+10;     session_register("pow");     $sex=($val[4]=="0")?"男":"女";     print<<<EOF <center> <font color="cc1111">以下の内容で良ければ「決定」をクリックしてください<p></font> <form action="./create_user.htm?mode=send" method="post"> <table border="0" cellpadding="3" cellspacing="1" bgcolor="000000"> <tr>   <td bgcolor="ffccff" align="center">ユーザーID</td>   <td bgcolor="ccffff">$val[0]</td> </tr> <tr>   <td bgcolor="ffccff" align="center">メールアドレス</td>   <td bgcolor="ccffff">$val[1]</td> </tr> <tr>   <td bgcolor="ffccff" align="center">表示名</td>   <td bgcolor="ccffff">$val[2]</td> </tr> <tr>   <td bgcolor="ffccff" align="center">性 別</td>   <td bgcolor="ccffff">$sex</td> </tr> <tr>   <td bgcolor="ffccff" align="center">種 族</td>   <td bgcolor="ccffff">$spe</td> </tr> EOF;     for($i=0;$i<sizeof($pow);++$i) {       print<<<EOF <tr>   <td bgcolor="ffccff" align="center">$p_pow[$i]</td>   <td bgcolor="ccffff" align="right">$pow[$i]</td> </tr> EOF;     }     print "</table><p>\n"       . "<input type=\"submit\" value=\"決定\" class=\"input\"><p>\n"       . "<a href=\"./create_user.htm\">やり直す</a>\n"       . "</form>\n"       . "</center>\n";     print_footer();   break;   case "send":     $host=gethostbyaddr($_SERVER["REMOTE_ADDR"]);     $passdb=uniqid("WEBRPG");     $pass_phrase=ereg_replace("http:","https:",$domain)."/create_user.htm?mode=regist&id=".$passdb;     $val=$_SESSION["val"];     $mes=<<<EOF W┃e┃B┃・┃R┃P┃G┃(┃仮┃)┃ ━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛ 新┃規┃ユ┃ー┃ザ┃ー┃登┃録┃┃ ━┛━┛━┛━┛━┛━┛━┛━┛ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   *本返信メールは、メールサーバーが自動的に配送しております ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ☆Web RPGのユーザー登録を受け付けました。 下記のURIをクリックすると、本登録が可能です。 万が一、登録をした記憶がないときは、このメールを破棄してください。 【登録内容】━━━━━━━━━━━━━━━━━━━━━━━━━━ ユーザーID: $val[0] 表示名  : $val[2] メール  : $val[1] ホスト  : $host ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 表示が折り返す場合は、全てをコピーしてブラウザに張り付けてください。 $pass_phrase また、1時間以内に本登録を行わなければ、この仮登録は破棄されます。 ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆  Web RPG 運営   KusuKusu  Mail $mymail ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆ EOF;     $val[1]=mb_convert_encoding($val[1],"SJIS","EUC-JP");     mb_language(ja);     mb_send_mail($val[1],"WebRPG登録",$mes,"From: $mymail\nReply-To: $mymail\nX-Mailer: WEBMAILER");     mb_send_mail($mymail,"WebRPG登録",$mes,"From: $val[1]\nReply-To: $val[1]\nX-Mailer: WEBMAILER");     $sql="insert into tmp_user values(";     for($i=0;$i<sizeof($val);++$i) {       $sql.="'".$val[$i]."',";     }     for($i=0;$i<sizeof($pow);++$i) {       $sql.="'".$pow[$i]."',";     }     $sql.="'".time()."','".$passdb."')";     pg_query($sql);     session_destroy();     header("location: ./create_user.htm?mode=exit");   break;   case "exit":     print_header("仮登録終了",$bc);     print<<<EOF <center> <table border="0" cellpadding="2" cellspacing="1" bgcolor="8789ff"><tr><td bgcolor="ffffff"> 先程入力されたメールアドレスへ、本登録への手続きの仕方を配送しました。<br> 万が一、メールが届かない場合は、メールアドレスが間違っているか、あなたのメールアドレスでないものを登録されたと思われます。<br> 正しく入力したのにも関わらず、上手くいかない場合は <a href="mailto:$mymail">管理人</a>までお知らせ下さい。<br> それでは本登録をしてゲームをお楽しみ下さい。 </td></tr></table><p> <a href="./">戻る</a> </center> EOF;     print_footer();   break;   case "regist":     $id=$_GET["id"];     $pass=make_password(8);     $res=pg_query("select * from tmp_user where pass='$id'");     if(pg_numrows($res)=="0") {       print_header("error",$bc);       print_error($domain,"そのようなページは存在しないか、又は仮登録より一時間以上経過し、仮登録が削除されています。");     }else {       if(@pg_result($res,0,"time")+3600<time()) {         pg_query("delete from tmp_user where pass='$id'");         print_header("error",$bc);         print_error($domain,"そのようなページは存在しないか、又は仮登録より一時間以上経過し、仮登録が削除されています。");       }       print_header("本登録終了",$bc);       for($i=0;$i<pg_numfields($res);++$i) {         $val[$i]=@pg_result($res,0,$i);       }     }     pg_freeresult($res);     pg_query("begin");     pg_query("insert into myuser(uid,pass,name,mail) values('$val[0]','$pass','$val[2]','$val[1]')");     $cid=pg_result(pg_query("select id from myuser where uid='$val[0]'"),"id");     $sql="insert into u_char values('$cid','$val[3]','$val[4]','0','1','$val[5]','$val[5]','$val[6]','$val[6]','$val[7]','$val[8]','$val[9]','$val[10]','$val[11]','$val[12]','','')";     pg_query($sql);     pg_query("delete from tmp_user where pass='$id'");     pg_query("insert into u_eq(id,gold) values('$cid','100')");     pg_query("insert into u_exp(id) values('$cid')");     pg_query("insert into u_class(id,lev0) values('$cid','1')");     pg_query("insert into u_abi(id) values('$cid')");     pg_query("commit");     print<<<EOF <center> <table border="0" cellpadding="3" cellspacing="1" bgcolor="76d399"> <tr><td bgcolor="ffffff" colspan="2" align="center">本登録が終了いたしました。</td></tr> <tr>   <td bgcolor="ffffff" align="center">ユーザーID</td>   <td bgcolor="ffffff">$val[0]</td> </tr> <tr>   <td bgcolor="ffffff" align="center">パスワード</td>   <td bgcolor="ffffff">$pass</td> </tr> <tr><td bgcolor="ffffff" colspan="2">   本データを失いますと、製作したキャラクターを使うことが出来なくなります。<br>   またお問い合わせがあっても答えられませんので、必ず何かに控えておいて下さい。<br>   それでは下記よりお入りください<br><br>   <center><a href="./">Enter</a> </td></tr> </table> EOF;     print_footer();   break;

noname#156053
質問者

お礼

ありがとうございます。解析してみます。

すると、全ての回答が全文表示されます。

関連するQ&A

このQ&Aのポイント
  • ノートパソコンのAMAZONへの接続が拒否される問題について
  • 接続方法には有線LAN(NTT)を使用していますが、再起動しても接続できません
  • PCが古いため、直接121への接続ができなくなった
回答を見る