Mam's WebSite
建築CGパース住宅CGパース

Mamの覚書Q&A検索

トップページMamの覚書Q&A検索PHP(ヘッダー)⇒Q&A


大項目:「 PHP 」 - 中項目:「 ヘッダー 」

「 ベーシック認証を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($PHP_AUTH_USER)) {
  Header("WWW-authenticate: basic realm=\"$realm\"");
  Header("HTTP/1.0 401 Unauthorized");
  print("認証に失敗しました。");
}else if($PHP_AUTH_USER != $user || $PHP_AUTH_PW != $pass){
  Header("WWW-authenticate: basic realm=\"$realm\"");
  Header("HTTP/1.0 401 Unauthorized");
  print "認証に失敗しました";
}else {
  print "認証完了";
}
?>


Mam's WebSite