BASIC認証のユーザー名をPHPで取得する方法

このQ&Aのポイント
  • BASIC認証のユーザー名をPHPで取得する方法についてまとめました。ログイン後のページにアクセス解析機能をつけたい場合に役立ちます。
  • BASIC認証のユーザー名をPHPで取得する方法について困っている方への解決策を提案します。ログイン後のページのアクセス解析に役立つ情報です。
  • BASIC認証のユーザー名をPHPで取得する方法について詳しく説明します。ログイン時のユーザー名を取得する手法や、可能な原因などについて解説します。
回答を見る
  • ベストアンサー

BASIC認証のユーザー名をPHPで取得したい

とあるレンタルサーバで、 BASIC認証のホームページを作成しております。 BASIC認証は「.htaccess」で AuthType Basic AuthName "メンバー専用ページ" AuthUserFile "ファイルパス" require valid-user ログイン後のページにアクセス解析機能をつけたいと思っていますが、BASICで入力したログインのユーザ名が取得できなくて困っております。 echo "test1:" . $_REQUEST['PHP_AUTH_USER']. "<br />\n"; echo "test2:" . $_SERVER['PHP_AUTH_USER']. "<br />\n"; echo "test3:" . $PHP_AUTH_USER . "<br />\n"; と書いて画面に出力してみましたが、正しくログインしていても 空又はNULLの状態です。 Apacheの設定?phpの設定?ソースコードの間違え? などわからない状態になっています。 よろしくお願い致します。

  • PHP
  • 回答数1
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • kiyusa
  • ベストアンサー率40% (10/25)
回答No.1

PHPにHTTP認証があるのですが、それを利用しないのはレンタルサーバの 環境によるものですか? 後はvar_dump($_SERVER)で取得できるか確認してみるか。

参考URL:
http://jp.php.net/manual/ja/features.http-auth.php
moti-_-_-_
質問者

お礼

ご回答ありがとうございます。 メンバーのディレクトリの配下にhtmlファイルが存在するため 「.htaccess」で行っていました。 var_dump($_SERVER)で調べた結果、 ["REMOTE_USER"]=> string(4) "xxxx" とありましたので、REMOTE_USERで使えることがわかりました。 phpの認証を使用すると「PHP_AUTH_USER」 「.htaccess」の認証を使用すると「REMOTE_USER」 にユーザー名が入ってくるという認識でよろしいのでしょうか・・・ 実際に取得できましたのでREMOTE_USERを使用して処理を 書くようにします。

関連するQ&A

  • Basic認証: PHP_AUTH_USERが

    環境:CentOS6.3, PHP Version 5.3.3, Apache/2.2.15 (CentOS) ,MySQL Server version 5.1.61 (Client API versionも同じ) です。テーブルmembers にname,password の2欄があり、データがそれぞれ、taro , abc と入っています。  ここで phpを下記のように書きました。 1 <?php 2 // データベースに接続      中略 7 8 // 認証処理(Basic認証) 9 if (!isset($_SERVER["PHP_AUTH_USER"])) { 10 header("WWW-Authenticate: Basic"); 11 header("HTTP/1.0 401 Unauthorized"); 12 exit; 13 }else{ 14 var_dump(($_SERVER)." --line_a"."<br />"); 15 print ("ユーザ名:". $_SERVER['PHP_AUTH_USER']." --line_b"."<br />"); 16 17 // 入力されたアカウントが正しいかチェック 18 $result = mysql_query( "SELECT COUNT(id) AS rows FROM `account` WHERE name = $_SERVER [ 'PHP_AUTH_USER' ] AND password = $_SERVER ['PHP_AUTH_PW' ]", $conn); 19 20 echo( $_SERVER [ 'PHP_AUTH_USER' ]."-".$_SERVER ['PHP_AUTH_PW' ]."--line_c"."<br />"); 21 echo($result."--line_d"."<br />"); 以下略 これでブラウザから認証を経てログインすると、 string(20) "Array --line_a " ユーザ名:taro --line_b taro-ptaro--line_c --line_d となって、$result に値が入りません。 18行の WHERE句を外し、 $result = mysql_query( "SELECT COUNT(id) AS rows FROM `account`", $conn) or die("result取得エラー") ; とすると、 string(20) "Array --line_a " ユーザ名:taro --line_b taro-abc--line_c Resource id #3--line_d となり、$result にResource id #3 が返ります。 WHERE句で name = 'taro'  を指定し、 $result = mysql_query( "SELECT COUNT(id) AS rows FROM `account` WHERE name = 'taro' ", $conn) or die("result取得エラー");  とすると、 string(20) "Array --line_a " ユーザ名:taro --line_b taro-abc--line_c Resource id #3--line_d となり、やはり、$result にResource id #3 が返ります。password を追加し、WHERE name = 'taro' AND password = 'abc' としても、Resource id #3--line_d と出ます。 ところが、18行の taro を $_SERVER [ 'PHP_AUTH_USER' ] に置き換え、 $result = mysql_query( "SELECT COUNT(id) AS rows FROM `account` WHERE name = $_SERVER [ 'PHP_AUTH_USER' ] AND password = 'abc'", $conn) or die("result 取得エラー") ; string(20) "Array --line_a " ユーザ名:taro --line_b result 取得エラー となって、$result に値が入りません。 $_SERVER [ 'PHP_AUTH_USER' ] を’’で囲んでも同じ。 何故でしょうか? どのようにすれば不具合の解決ができるでしょうか?

    • ベストアンサー
    • PHP
  • Basic認証について

    Basic認証を行ないたいと思っていますが、設定したIDとPWDでログインできません。 設定は以下の通りです。 .htaccessファイル ------------------ AuthUserFile /****/phpMyAdmin/.htpassword AuthGroupFile /****/phpMyAdmin/.htgroup AuthType Basic AuthName "phpMyAdmin login?" require valid-user ------------------ .htpasswordファイル ------------------ test:test ------------------ .htgroupファイルは、空。 設置ディレクトリは3つとも /****/phpMyAdmin/ に設置。 レンタルサーバを利用していて、FFFTPで表示される サーバのパスは /****/phpMyAdmin だったので、上記のパスを記述しています。 どこが間違っているのでしょうか。 よろしくお願い致します。

  • 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
  • .htaccessによるユーザー認証

    FC2の無料ホームページで .htaccess のユーザー認証を試みてますが、上手くいきません。 .htaccessの内容は以下の通りで、  passというフォルダを作って、パスワードファイルを格納しています。 AuthType Basic AuthName "Input your ID and Password." AuthUserFile /pass/passwd.dat require valid-user 状況としては、エラー表示もせず何度もパスワードをきいてきます。 どなたか、お助け下さい!

  • BASIC認証で確認ダイアログが表示されない

    あるディレクトリにBASIC認証をかけようと思っているのですが、 ダイアログが表示されずに困っています。 [.htaccess] AuthType Basic AuthName "Login ID and Password" AuthUserFile /home/アカウント/www/test/.htpasswd AuthGroupFile /dev/null require valid-user [.htpasswd] test:暗号化されたパスワード ページを開くと返ってくるのが404Errorです。 (「このプログラムではこの Web ページを表示できません」と表示されます) .htpasswdまでのパスは合っていると思います。 なぜダイアログが出てくれないのでしょうか・・・?

  • Basic認証ができません

    自宅サーバーを立てました。しかしBasic認証ができません。 httpdに以下のように記述しました。プロテクトフォルダーにアクセスすると認証画面は表示されますが、ユーザー名とパスワードを正しく入れても正しく認証されません。.htpasswdと.htaccessは設置してあります。他に何を設定すればいいのでしょうか? <Directory "C:\www\cgi-bin\protect\members"> AuthType Basic AuthName "会員専用" AuthUserFile C:\www\cgi-bin\protect\members.htpasswd Require valid-user </Directory>

  • Basic 認証ができない

    Basic認証を行いたいのですが、「ユーザー」と「パスワード」を入れても認証を通過できません。 [.htaccess]ファイルには下記のように記述しました。 AuthUserFile /home/test/.htpasswd AuthGroupFile /dev/null AuthName "Secret Area" AuthType Basic require valid-user <Files ~ "^.(htpasswd|htaccess)$"> deny from all </Files> [.htpasswd]ファイルには下記のように記述しました。 test:KNBKgzgRhzAOk パスワードは下記URLで作成しました。 http://www.futomi.com/lecture/htaccess/htpasswd.html なにが問題なのでしょうか?

  • 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
  • 特定のページだけ認証をかけたい

    https://okwave.jp/qa/q9629337.html の続き 下記のように認証をかけたのですが、該当ページにアクセスしてもそのまま開きます。 <Files html/charge.html> AuthUserFile /var/www/vhosts/ドメイン名/httpdocs/.htpasswd AuthGroupFile /dev/null AuthName "Input ID and Password." AuthType Basic require valid-user </Files> しかし、アクセスすると認証の画面が出ません。 そのままページが開きます。 どこに問題があるのでしょうか? サーバはロリポップのエコノミープランです。

    • ベストアンサー
    • PHP
  • ホームページでPHP認証

    ホームページでPHP認証を組み込もうと考えているのですが、ユーザーごとに違うページが開く認証をつくるにはどうすれば良いのでしょうか。 Authを使うと良いなどは検索してわかったのですが、その続きが分かりません。 よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう