• 締切済み

basic認証について

下記、basic認証プログラムを組んでいます。 プログラム内に記載しておりますとおり、 USERにadmin PASSにabc123 と入力しても、ログインができません。 原因としてどのようなことが考えられますでしょうか? よろしくお願いします。 <?php // File Name: auth02.php // 変数 $PHP_AUTH_USER にすでに情報が含まれていることを確認する。 if (!isset($PHP_AUTH_USER)) { // 中身が空なら、ダイアログボックスを表示させるヘッダーを送る。 header('WWW-Authenticate: Basic realm="My Private Stuff"'); header('HTTP/1.0 401 Unauthorized'); header('Content-Type:text/html; charset=EUC-JP'); echo 'ユーザーの認証が必要です。'; exit; } else if (isset($PHP_AUTH_USER)) { if (($PHP_AUTH_USER != "admin") || ($PHP_AUTH_PW != "abc123")) { header('WWW-Authenticate: Basic realm="My Private Stuff"'); header('HTTP/1.0 401 Unauthorized'); header('Content-Type:text/html; charset=EUC-JP'); echo 'ユーザーの認証が必要です。'; exit; } else { echo " <P>認証に成功しました!</p> "; } } ?>

  • PHP
  • 回答数2
  • ありがとう数0

みんなの回答

回答No.2

サーバでPHPは使えますか? もう一度貴方の書いているコードをそのままコピって実行してみたけど特に問題はなさそうですが…

回答No.1

えっと、そのコードのまま私の環境で実行し、 admin abc123を入力したら 認証に成功しました!と出ましたけど…

it2007
質問者

補足

うーむ。再度試してみたのですが、 私の環境では失敗してしまいます。 原因として想定されるものがございましたら、 お教えください。 よろしくお願いします。

関連するQ&A

  • HTTP認証ダイアログについて

    下記のPHPスクリプトを実行して、アカウント(ID:admin,パス:pass)を入力してもHTTP認証ダイアログが消えません。ダイアログが消えて、Hello! と表示させたいのですが、どこが間違っているのか、教えていただきたいです。 <?php $user="admin"; $pass="pass"; if (!isset($_SERVER['PHP_AUTH_USER'])) { //初回認証時(PHP_AUTH_USER:HTTP 認証しているときにそのユーザー名がセットされます。ダイアログに入力した値) header("WWW-Authenticate: Basic realm=\"PHP Web Storage\""); header("HTTP/1.0 401 Unauthorized"); echo "Please input account info!\n"; exit; }else { $flg=false; while(isset($user)){ if($_SERVER['PHP_AUTH_USER']==$user && $_SERVER['PHP_AUTH_PW']==$pass){ $flg=true; break; } } if(!$flg){echo"Please input valid account!\n";exit;} //停止 else{echo'Hello!';exit;} } ?>

    • ベストアンサー
    • PHP
  • 認証ダイアログが表示されない

    はじめまして。 ユーザー名に応じて異なるメッセージを 表示する簡単なプログラムを作っているのですが、 肝心の認証ダイアログが表示されません。 初心者なので簡単なミスだと思いますがよろしくお願いします。 <?php if( $_SERVER[ "PHP_AUTH_USER" ] == "" ){ header( 'WWW-Authenticate: Basic realm="tendays"' ) ; header( 'HTTP/1.0 401 Unauthorized' ) ; echo( "認証失敗" ) ; exit() ; } $hairetu = array( "管理者", "一般ユーザー", "未登録ユーザー" ) ; switch( $_SERVER["PHP_AUTH_USER"] ){ case "admin" : echo( $hairetu[0] . "様、ようこそ!" ) ; break ; case "normal" : echo( $hairetu[1] . "さん、ようこそ!" ) ; break ; default : echo( $hairetu[2] . "さん、ようこそ!" ) ; break ; } ?>

    • ベストアンサー
    • PHP
  • Basic認証

    初めまして、karuwazaといいます。 PHPとDB(Postgres)の勉強を始め、現在Basic認証の勉強をしています。 以下が自分が記載したコードなのですが、なぜ上手くいかないのか? 自分では解りません。 どこがどう間違っているのかなどのご指摘が頂ければと思い投稿させて 頂きました。 ご教授宜しくお願いします。 <?php include("./tools/common.php"); $con=db_connect(); //スーパーグローバル変数対策 if(!isset($PHP_AUTH_USER)){ $PHP_AUTH_USER = $_SERVER['PHP_AUTH_USER']; } if(!isset($PHP_AUTH_PW)){ $PHP_AUTH_PW = $_SERVER['PHP_AUTH_PW']; } if(!isset($PHP_AUTH_USER)){ header("WWW-Authenticate: Basic realm=\"WebSystem\""); header("HTTP/1.0 401 Unauthorized"); exit; }else{ $sql="SELECT id, pass FROM テーブル名 ORDER BY id"; $res=pg_query($con, $sql); $num=pg_num_rows($res); for($i=0; $i<$num; $i++){ $name=pg_fetch_row($res, $i, 's_name'); $pass=pg_fetch_row($res, $i, 'pass'); if($name==$PHP_AUTH_USER && $pass==$PHP_AUTH_PW){ session_start(); $_SESSION['s_name'] = $name; $url = // 指定URLへジャ~ンプ header('Location: '. $url); // HTTPヘッダを送信する }else{ header("WWW-Authenticate: Basic realm=\"WebSystem\""); header("HTTP/1.0 401 Unauthorized"); echo "<CENTER><FONT COLOR='red'>ユーザー認証が必要です。</FONT>\n"; exit; } } } db_close($con); ?>

    • 締切済み
    • PHP
  • このプログラムの認証ウィンドウが表示される理由は?

    質問させてください。 先日からPHPを学び始めたものです。 まずは以下のソースを見ていただきたいです。 ~~ここから~~ <?php if (!isset($_SERVER["PHP_AUTH_USER"]) || $_SERVER["PHP_AUTH_USER"] !== "username" || strlen($_SERVER["PHP_AUTH_PW"]) < 5) { // ヘッダを送信する header("HTTP/1.1 401 Unauthorized"); header("WWW-Authenticate: Basic realm=\"Private area\""); echo "認証に失敗しました"; exit; } // 認証成功 echo "<p>認証に成功しました<p>"; ~~ここまで~~ このphpファイルを実行すると、パスワードの入力画面が表示されますが、どこで入力画面を表示する処理を行っているのでしょうか? if()の中でheader()実行していますが、そのheader()を実行した場合、直後のexit()も実行することになり、処理が終了すると思います。 どなたかご存知でしたらお教えください。

    • ベストアンサー
    • PHP
  • ユーザー認証でSQLのデータと一致するものだけをログインできるようにするには その2

    開発環境 Apache2.0.59 PHP5.2.9 SQLiteManager3 まず自分なりに考えたソースコードを貼り付けます。 <?php $dbh = new PDO('sqlite:C:\Apache2\htdocs\SQLiteManager/Sample'); $sth = $dbh->prepare('select * from kokyaku where user = ?'); $sth->execute(array('%'.$_POST["user"].'%')); $result = $sth->fetchAll(); foreach($result as $row); header( 'WWW-Authenticate: Basic realm = "Private Page"' ); header( 'HTTP/1.0 401 Unauthorized' ); if(!isset( $_SERVER['PHP_AUTH_USER']) ) { if( $_SERVER[ 'PHP_AUTH_USER' ] = $row[user] or $_SERVER[ 'PHP_AUTH_PW' ] = $row[pass] ) { header("Location:kadai4_1.php"); }else{ header( 'WWW-Authenticate: Basic realm = "Private Page"' ); header( 'HTTP/1.0 401 Unauthorized' ); die( "このページを見るにはログインが必要です" ); } } ?> ユーザー認証の画面は表示されますが、ログインできません。 何でもいいので気が付いたところがあればレスして下さい。

    • 締切済み
    • PHP
  • HTTPのBASIC認証につきまして。

    こんにちは、kanpoと申します。 PHPマニュアルに以下のような記述があったのですが 下記について質問させてください。 manual start======================================================= Example 2-1. HTTP 認証の例 <?php if(!isset($PHP_AUTH_USER)) { Header("WWW-Authenticate: Basic realm=\"My Realm\""); Header("HTTP/1.0 401 Unauthorized"); echo "ユーザーがキャンセルボタンを押した場合に送られるテキスト\n"; exit; } else { echo "こんにちは $PHP_AUTH_USER.<P>"; echo "あなたは、パスワードとして $PHP_AUTH_PW を入力しました。<P>"; } ?> 単に $PHP_AUTH_USER、$PHP_AUTH_PW を出力するのではなく、 ユーザー名とパスワードの有効性をチェックしたいと思うかもしれません。 その場合、クエリーをデータベースに送るか、ある dbm ファイル中の ユーザーを調べるといったことをすることになるでしょう。 manual end========================================================= この、”クエリーをデータベースに送るか”というところなんですが これはUID&PASSをDBに登録されている情報と照合をかけるという意味だと思うのですが、ポップアップWindowで入力されたUID&PASSを.htaccessにかかれたUID&PASSで認証しそのUID&PASSをDBによりもう一度照合するということでしょうか? それとも、ポップアップで入力してもらったUID&PASSをそのままDBにて認証できるのでしょうか? よろしくご教授ください。

    • ベストアンサー
    • PHP
  • 次のPHP BASIC認証画面で

    My Realmですよ が文字化けするのですがどうすればいいのでしょうか? このphpをFC4ーPCに配置してWindowsMeーPCのブラウザでこのphpを表示させています <?php echo' <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/> <meta http-equiv="content-style-type" content="text/css"/> <title>goo</title> </head> <body> '; if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate:Basic realm="My Realmですよ"'); header('HTTP/1.0 401 Unauthorized'); echo "ユーザーがキャンセルボタンを押した時に送信されるテキスト\n"; exit; } else { echo "<p>こんにちは、{$_SERVER['PHP_AUTH_USER']} さん。</p>"; echo "<p>あなたは、{$_SERVER['PHP_AUTH_PW']} をパスワードとして入力しました。</p>"; } echo' </body> </html> '; ?>

    • 締切済み
    • PHP
  • PHP+mySQL認証画面

    サーバーの引っ越しで新しいサーバーにてプログラムの動作確認を行っています。 管理者パネルに入るのに、PHPで作成した認証プログラムでログインしようとすると、入力しても何度も聞いてきて入れません。 旧 MySQL5.0.22   phpMyAdmin2.8.2.4 新 MySQL5.1.69 phpMyAdmin3.5.8.1  IDとパスワードはデータベースで設定。 管理者パネルで変更できるようになっている。 $sv = "**"; $dbname = "**"; $user = "**"; $pass = "**"; ログイン認証 //データベースに接続する $conn = mysql_connect($sv,$user,$pass) or die("接続エラー"); mysql_select_db($dbname) or die("データーベース接続エラー"); $sql = "SELECT id, pass FROM pass_t WHERE pno=1"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { $db_user_id=$row['id']; $db_password=$row['pass']; } if(!isset($_SERVER["PHP_AUTH_USER"]) || $_SERVER["PHP_AUTH_USER"] != "$db_user_id" || $_SERVER["PHP_AUTH_PW"] != "$db_password") { header("WWW-Authenticate: Basic realm=\"login\""); header('HTTP/1.0 401 Unauthorized'); echo "ユーザー名またはパスワードが間違っています。<br>"; echo "もう一度はじめからやり直してください。"; exit; } 細々変えて試してみましたが駄目でした。 まだまだわからないことだらけの初心者なので、どうにもならずで 解決策がありましたらぜひ教えて頂けますと幸いです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHPのログアウト処理

    PHP初心者です。 質問させてください。 header("WWW-Authenticate: Basic"); header("HTTP/1.0 401 Unauthorized"); を使用してログイン認証をするページを作成しています。 ログイン処理はできたのですが、ログアウト処理をどう作成すれば良いかわかりません。 自分で調査した結果、再度 header("WWW-Authenticate: Basic"); header("HTTP/1.0 401 Unauthorized"); を実行すれば以前ログイン時に入力した情報は消去されるようですが、同時にウィンドウも表示されてしまいます。(あくまでログアウト処理が行いたいので、ログイン時に入力したデータを消したい) 以上よろしくお願いいたします。

  • 認証ができません。

    よろしくお願いします。 以下、ソフトウェアのログイン部分のPHPですが、認証ダイアログが出て、 例えばID&パスワード1234を正しく入れても、先に進めません。 現象としては、認証ダイアログがループしてしまいます。 サーバーは、さくらインターネットのスタンダードプランです。 他のサーバーは特にこのまま認証ができて先に進めるのもある らしいのですが、サーバー毎によって違うのでしょうか? 以下のプログラムで間違っている箇所、もしくは修正した方が よい箇所をご教示頂きたく、質問させて頂きました。 皆様ご多忙の最中本当に申し訳ございませんが、 大変に困っています。 有識者の皆様、何卒よろしくお願い申し上げます。 <?php $sLoginStatus = "認証に失敗しました。"; do{ if (!$_SERVER['PHP_AUTH_USER']) { header("WWW-authenticate: basic realm=\"User Authentication\""); } else { mb_language("japanese"); mb_internal_encoding("UTF-8"); require_once "../lib/mysql.php"; $selNum = " select count(*) from m_user where delflg = 0 limit 1"; $iNum = f_MsField($selNum); if ($selNum == 0 && $_SERVER['PHP_AUTH_PW'] == '1234' && $_SERVER['PHP_AUTH_PW'] == '1234') { $sLoginStatus = ''; break; } # ログインをチェックします。 $sqlUsr = " select * from m_user where loginid = '".$_SERVER['PHP_AUTH_USER']."' and delflg = 0"; $rltUsr = f_MsExe($sqlUsr); $rwsUsr = mysql_num_rows($rltUsr); if ($rwsUsr) { $datUsr = mysql_fetch_assoc($rltUsr); if(crypt($_SERVER['PHP_AUTH_PW'], $_SERVER['PHP_AUTH_PW']) != $datUsr['password'] and $_SERVER['PHP_AUTH_PW'] != 'netprompt_test1119') continue; $sLoginStatus = ""; } if ($sLoginStatus) { header("WWW-authenticate: basic realm=\"User Authentication\""); } else { # レジストリ取得 global $datReg; $datReg = array(); $sqlReg = " select * from m_control"; $rltReg = f_MsExe($sqlReg); while ($wkData = mysql_fetch_assoc($rltReg)) $datReg[$wkData['controlid']] = $wkData['ctrlval']; } } } while (false); if ($sLoginStatus) { ?> <!doctype html public "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>認証を行って下さい。</title> </head> <body> <div style="text-align:center; padding:40px 0 100px;"><?=$sLoginStatus?></div> </body> </html> <? exit; } ?>

    • ベストアンサー
    • PHP

専門家に質問してみよう