「ベーシック認証をPHPで行うには」
ベーシック認証をPHPで行いたいのですが、認証に3回失敗するまで入力できるようにしたい。
どうすればよいでしょうか。
回答
認証を1回失敗でエラー表示するサンプルはよくあるのですが、
3回失敗の場合は以下のソースコードが参考になると思います。
ポイントは、
Header("WWW-authenticate: basic realm=\"$realm\"");
でヘッダーを吐き出して認証が表示されたときに、キャンセルをクリックすると
次の行へ進み、OKをクリックした場合には、ソースコードの先頭から読み直されて実行される
(ただし変数 $PHP_AUTH_USER と $PHP_AUTH_PW にはユーザーが入力した文字列が保持される)
ということでしょう。3回失敗したかどうかはブラウザが自動的に判断してくれます。
これさえわかれば簡単に作成できます。
Header("HTTP/1.0 401 Unauthorized");
を出力すれば、3回失敗のカウントがクリアーされるので、
応用すれば、10回失敗までOKな無意味な認証も作成可能でしょう。
ソース
<?php
/**********************************************/
/* 認証 2006(c) mam */
/**********************************************/
$user = 'user'; //とりあえず適当に認証ユーザー名と
$pass = 'pass'; //パスワードを設定します。
$realm='認証しませう'; //認証時に表示される文字を設定
if (!isset($_SERVER["PHP_AUTH_USER"])) {
Header("WWW-authenticate: basic realm=\"$realm\"");
Header("HTTP/1.0 401 Unauthorized");
print("認証に失敗しました。");
}else if($_SERVER["PHP_AUTH_USER"] != $user || $_SERVER["PHP_AUTH_PW"] != $pass){
Header("WWW-authenticate: basic realm=\"$realm\"");
Header("HTTP/1.0 401 Unauthorized");
print "認証に失敗しました";
}else {
print "認証完了";
}
?>