PHP認証

HTTPサーバ認証

このコードを書いたページにアクセスしようとするとサーバが認証のためのポップアップ画面を表示する。ブラウザのポップアップを許可する必要がある。ユーザ名とパスワードを入力して認証する。いったん認証されるとブラウザを閉じるまで有効である。共有パソコンの場合は、最後にブラウザを閉じて認証をリセットしておく。サーバ管理者はcPanelのPassword Protect Directoriesでも設定できる。

<?php
$user_file = "./user";
if(!isset($_SERVER['PHP_AUTH_USER'])){
  header("WWW-Authenticate: Basic realm=\"ユーザ名とパスワードを入力してください。\"");
  header("HTTP/1.0 401 Unauthorized");
  exit;
  }else{
  $id_pass = file($user_file);
  $flag = 0;
  for($i=0; $i<count($id_pass); $i++){
    list($id,$pass) = split(",", $id_pass[$i]);
    if($id == $_SERVER['PHP_AUTH_USER'] && $pass == $_SERVER['PHP_AUTH_PW']){
      $flag++;
      break;
    }
  }
}
?>
  • 認証に使うユーザ名とパスワードは、コンマ( , )で区切って、userファイルに書く。
  • 複数の組み合わせを設定できる。最後はかならず改行する。
  • ユーザ名とパスワードが一致すると、$flagが1になるので、
    if($p_flag > 0){~} と判定して~に認証後の処理を書く。
  • Sample ユーザ名test パスワード1234を入力すると認証される。

FORMを使った認証

Formのname="action"を参照するとき、PHP4では$actionだったが、PHP5では$_POST['action']とする。$PHP_SELFも使えないので、$_SERVER['PHP_SELF']と書く。

〔例〕ユーザ名test パスワード1234

ユーザ名: パスワード:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"
enctype="application/x-www-form-urlencoded"> 
<input type="hidden" name="action" value="post"> 
ユーザ名:<input type="type" name="u_id" size="12">
パスワード:<input type="type" name="passwd" size="12">
<input type="submit" name="submit" value="送信">
<BR> 
<?php $data_file = "./data"; $action = $_POST['action'];
$u_id = $_POST['u_id']; 
$passwd = $_POST['passwd']; 
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++; } }
  if($p_flag > 0){ echo "<p style='color:red'>正式に認証されました。</p>\n"; }
  else { echo "<p style='color:red;'>認証できません。再入力してください。</p>\n"; }
} ?>