PHP認証システム

 今まで余り気に掛けてなかったんですが、そう言えば以前Perlを勉強していた頃、CGIを使った認証システムのスクリプトがよく取り上げられていましたっけ。僕は普段こう言った認証に関しては、専らApacheの.htaccess機能を使っているので、今まで取り立ててこの手のスクリプトを作ったりしませんでしたが、一般の方にはやはり有用なスクリプトではないかと思い、この度アップする事と致しました。

 飽くまでも基本的なスクリプトですので、実際にお使いになる時は、更に応用を効かして色々と改造して見て下さい。

システム概要

 この認証システムは、ユーザーIDとパスワードのセットを別ファイルに保存し、スクリプトの中でフォームに入力されたそれぞれの値を、保存ファイルの中身と照合する事によって、その都度ユーザー認証をかけるものです。

 ユーザーIDとパスワードのセットを保存したテキストファイルの中身は、以下のようなもの(それぞれの値は飽くまでも一例です。)にして下さい。ここで注意が必要なのは、各行の最後にもコンマ「,」を忘れないようにして欲しいと言う点です。これはスクリプトの中のsplit()関数と大いに関係があります。又、このファイルの属性は「644」にして下さい。

komochan,777,
komo,888,
micchan,999,

スクリプト本体の内容

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=x-sjis">
<TITLE>PHP認証システム</TITLE>
</HEAD>
<BODY>
<FORM ACTION="<?php echo $PHP_SELF; ?>" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded">
<INPUT TYPE="HIDDEN" NAME="action" VALUE="post">
<CENTER>
<P><FONT SIZE="6" COLOR="green">PHP認証システム</FONT></P>
<P>
<HR ALIGN="CENTER">
</P>
<P>
<TABLE BORDER="0" WIDTH="27%">
<TR>
<TD WIDTH="50%" BGCOLOR="#CCFFCC">
<P ALIGN="CENTER">ユーザーID
</TD>
<TD WIDTH="50%"><INPUT TYPE="TEXT" NAME="u_id" SIZE="12"></TD>
</TR>
<TR>
<TD WIDTH="50%" BGCOLOR="#CCFFCC">
<P ALIGN="CENTER">パスワード
</TD>
<TD WIDTH="50%"><INPUT TYPE="TEXT" NAME="passwd" SIZE="12"></TD>
</TR>
<TR>
<TD COLSPAN="2">
<CENTER>
<P><INPUT TYPE="SUBMIT" NAME="Submit" VALUE="送信">
</CENTER>
</TD>
</TR>
</TABLE>
</P>
<P>データファイルの内容に照らし合わせて、IDとパスワードで認証します。</P>
<BR><BR>
全体のフォーム部分は、一般的なホームページ作成ソフトで作りました。ファイルの拡張子を*.phpに変えてから、中にPHPのコードを埋め込んで行きます。
<?php
$data_file = "./d_file.dat"; //データファイルの指定
ユーザーIDとパスワードのセットを保存するファイルを指定します。
if ($action == "post") {
 $p_data = file($data_file);
 $p_flag = 0;
 for($i=0; $i<count($p_data); $i++){
  list($id,$pass) = split(",", $p_data[$i]);
  if($id == $u_id && $pass == $passwd){
   $p_flag++;
  }
 }
フォームからユーザー認証の要求があれば、まずユーザーIDとパスワードのセットを保存しているファイルの内容を変数$p_dataに読み込んで、それぞれのセットをループ処理の中で照合して行きます。

もしユーザーIDとパスワードのセットが照合すれば、変数
$p_flagの値を1増やします。
 if($p_flag > 0){
  echo "<FONT COLOR='red'>おめでとうございます。あなたは正式に認証されました。</FONT>\n";
 } else {
  echo "<FONT COLOR='red'>ユーザーIDとパスワードが間違っています。やり直して下さい。</FONT>\n";
 }
}
?>
変数$p_flagの値を基準に、認証の可否を判断します。

ここでは認証の可否を表示するだけの内容ですが、これを応用して認証後のページを表示するようにして頂ければいいかと思います。
</CENTER>
</FORM>
</BODY>
</HTML>
HTML本体の終了

 *上の内容をこのまま複写しても動きません。何故なら、表示を見やすくする為コード中に全角スペースが入っているからです。実際にお使いになる時は、この点を修正してからサーバにアップして下さい。

実際の応用例

 ここでは最初の認証フォームの表示は固定化されていますが、このシステムを実際に使う場合、最初の認証フォーム自体もPHPコードの中でファンクション化し、認証後は全く別の内容を表示するように、各処理を分化した方がいいと思います。(この手のスクリプトをKOMONETの「PHPスクリプト配布コーナー」で配布しています。)

 又、ご存知かとは思いますが、PHPのクラスライブラリであるPHPLIBには、Authクラスと言う認証用クラスが用意されています。これを利用すれば、より高度なユーザー認証機能が利用できます。

HOME