BASIC認証システム
18章で通常の入力フォームを使った認証システムをご紹介しましたが、やはりBASIC認証を使ったタイプもご紹介しておいた方がいいと思いまして、遅ればせながらこのページを作った次第です。尚、このタイプは、KOMONETの「PHPスクリプト無料配布コーナー」では既に配布しています。
BASIC認証とは…
BASIC認証システムは、header()関数を使って以下のようなヘッダー情報を送信し、ブラウザに認証ウィンドウを表示させるものです。
header("WWW-Authenticate: Basic realm=\"Sample Script\"");
header("HTTP/1.0 401 Unauthorized");ただし、このBASIC認証を使った場合、1回でも認証に成功してしまうと、ブラウザを一旦閉じない限り、後は何回でもそのまま入れてしまいます。この点、ちょっと不便に感じる事もあるかな?(^^ゞ
ユーザーIDとパスワードのセットを保存したテキストファイルの中身は、以下のようなもの(それぞれの値は飽くまでも一例です。)にして下さい。ここで注意が必要なのは、各行の最後にもコンマ「,」を忘れないようにして欲しいと言う点です。これはスクリプトの中のsplit()関数と大いに関係があります。又、このファイルの属性は「644」にして下さい。
komochan,777,
komo,888,
micchan,999,*注意…尚、今回のスクリプトはPHP4.2.0以降のスーパーグローバル変数に対応したものになっています。
スクリプト本体の内容
<?php
//=============初期設定==============
$data_file = "./d_file.dat"; //データファイルの指定if(!isset($_SERVER['PHP_AUTH_USER'])){
header("WWW-Authenticate: Basic realm=\"Sample Script\"");
header("HTTP/1.0 401 Unauthorized");
exit;「!isset()」は、「変数がセットされていなければ」と言う意味です。「!」は否定を表します。 }else{
$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 == $_SERVER['PHP_AUTH_USER'] && $pass == $_SERVER['PHP_AUTH_PW']){
$p_flag++;
break;
}
}
}認証ウィンドウからデータが送られて来た場合の処理です。
まずIDとパスワードを格納したファイルを読み込みます。認証の可否を判定するフラグ$p_flagを立て、ループ処理の中で、IDとパスワードの値がそれぞれ一致するか判定します。それぞれが一致した場合は、フラグ$p_flagの値を1増加し、ループ処理を抜けます。if($p_flag > 0){
echo "<HTML><HEAD>\n";
echo "<META HTTP-EQUIV=Content-Type CONTENT=text/html;CHARSET=x-sjis>\n";
echo "<TITLE>PHP認証システム</TITLE></HEAD>\n";
echo "<BODY>\n";
echo "<CENTER><BR><BR><BR><FONT COLOR='blue'>おめでとうございます。あなたは正式に認証されました。<BR><BR>\n";
echo "ここにお好きなHTML表示を埋め込んで下さい。\n";
echo "</CENTER></BODY></HTML>\n";認証が通った場合の処理です。
ここに認証が通った後に表示する内容を埋め込みます。include()で他のファイルを読み込んでもいいでしょう。}else{
header("WWW-Authenticate: Basic realm=\"Sample Script\"");
header("HTTP/1.0 401 Unauthorized");
echo "<CENTER><FONT COLOR='red'>ユーザー認証が必要です。</FONT>\n";
exit;
}
?>認証に失敗した場合は、再度「認証ウィンドウ」を表示します。ついでに警告文も表示しましょう。3回失敗すると、表示されるようです。 *上の内容をこのまま複写しても動きません。何故なら、表示を見やすくする為コード中に全角スペースが入っているからです。実際にお使いになる時は、この点を修正してからサーバにアップして下さい。