トップへ(mam-mam.net/)

ベーシック認証を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($_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 "認証完了";
}
?>