- PR -

PHP初心者 Basic認証について

1
投稿者投稿内容
AlohaHawaii
会議室デビュー日: 2007/01/16
投稿数: 9
投稿日時: 2007-01-16 13:36
解説本に沿って勉強中です。
次のBasic認証のコードでユーザー、パスワードを入力しても、認証画面が繰り返し表示されるだけで
ブラウザに変わりません。キャンセルした場合のみキャンセル時のメッセージをブラウザに表示します。
どこがおかしいのでしょうか。よろしくお願い致します。

<?php
if(empty($_SERVER['PHP_AUTH_USER']) || $_SEVER['PHP_AUTH_USER']==""){
header("WWW-Authenticate:Basic realm=\"Sample\"");
header("HTTP/1.0 401 Unauthorized");
?>
<html>
<head>
<title>Basic認証のテスト</title>
<META http-equiv="Content-Type" content="text/html;
charset=Shift_JIS">
</head>
<body>
Basic認証のテスト<br>
<br>
キャンセルされました。
</body>
</html>
<?php
}else{
if($_SERVER['PHP_AUTH_USER']=="test" && $_SERVER['PHP_AUTH_PW']=="pass"){
?>
<html>
<head>
<title>Basic認証のテスト</title>
<META http-equiv="Content-Type" content="text/html;
charset=Shift_JIS">
</head>
<body>
Basic認証のテスト<br>
<br>
こんにちは、<?=$_SEVER['PHP_AUTH_USER']?>さん

</body>
</html>
<?php
}else{
header("WWW-Authenticate:Basic realm=\"Sample\"");
header("HTTP/1.0 401 Unauthorized");
?>
<html>
<head>
<title>Basic認証のテスト</title>
<META http-equiv="Content-Type" content="text/html;
charset=Shift_JIS">
</head>
<body>
Basic認証のテスト<br>
<br>
ユーザーID、またはパスワードが違います。
<br>
</body>
</html>

<?php
}}
?>
Tasuku
大ベテラン
会議室デビュー日: 2006/09/14
投稿数: 106
お住まい・勤務地: tokyo
投稿日時: 2007-01-16 14:04
検証のために、「ユーザーID、またはパスワードが違います。」がある
最後の else { } の中で、
 ・header の送信をコメントアウトする
 ・$_SERVER['PHP_AUTH_USER'] と $_SERVER['PHP_AUTH_PW'] を表示する
をしてみたらどうでしょう。

どう「ユーザーID、またはパスワードが違」うのかが分かると思いますが。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-01-16 14:15
引用:

AlohaHawaiiさんの書き込み (2007-01-16 13:36) より:
解説本に沿って勉強中です。
次のBasic認証のコードでユーザー、パスワードを入力しても、認証画面が繰り返し表示されるだけで
ブラウザに変わりません。キャンセルした場合のみキャンセル時のメッセージをブラウザに表示します


webサーバのBASIC認証を使うのであれば、PHP_AUTH_USERとPHP_AUTH_PASSは認証されたあとでセットされると思いますが、.htaccessの設定などは間違いないですか?

http://www.php.net/manual/ja/features.http-auth.php

[ メッセージ編集済み 編集者: shimix 編集日時 2007-01-16 14:16 ]
AlohaHawaii
会議室デビュー日: 2007/01/16
投稿数: 9
投稿日時: 2007-01-16 16:16
ありがとうございました。
ご指摘頂いた「.htaccessの設定」という意味がよく分からなかったのですが、
shimixにご紹介頂いたサイトをヒントに修正したらOKでした。(以下)
よろしければ「.htaccessの設定」の意味を教えて頂けますでしょうか。
一応解決しましたので、時間があればで結構です。

<?php
if(!isset($_SERVER['PHP_AUTH_USER'])){
header("WWW-Authenticate: Basic realm=\"sample\"");
header("HTTP/1.0 401 Unauthorized");
?>

<html>
<head>
<title>Basic認証のテスト</title>
<META http-equiv="Content-Type" content="text/html;
charset=Shift_JIS">
</head>
<body>
Basic認証のテスト<br>
<br>
キャンセルされました。
</body>
</html>


<?php
}else{
if($_SERVER['PHP_AUTH_USER']=="test" && $_SERVER['PHP_AUTH_PW']=="pass"){
?>

<html>
<head>
<title>Basic認証のテスト</title>
<META http-equiv="Content-Type" content="text/html;
charset=Shift_JIS">
</head>
<body>
Basic認証のテスト<br>
<br>
こんにちは
<?php
print $_SERVER['PHP_AUTH_USER'];
?>
</body>
</html>

<?php
}else{
header("WWW-Authenticate: Basic realm=\"sample\"");
header("HTTP/1.0 401 Unauthorized");
?>

<html>
<head>
<title>Basic認証のテスト</title>
<META http-equiv="Content-Type" content="text/html;
charset=Shift_JIS">
</head>
<body>
Basic認証のテスト<br>
<br>
ユーザーID、またはパスワードが違います。<br>
<br>
</body>
</html>

<?php
}}
?>
AlohaHawaii
会議室デビュー日: 2007/01/16
投稿数: 9
投稿日時: 2007-01-16 16:23
失礼しました。
>shimixにご紹介頂いたサイトをヒントに修正したらOKでした。(以下)

shimixさんです。
申し訳ありません。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-01-16 17:10
引用:

AlohaHawaiiさんの書き込み (2007-01-16 16:16) より:
ご指摘頂いた「.htaccessの設定」という意味がよく分からなかったのですが、
shimixにご紹介頂いたサイトをヒントに修正したらOKでした。(以下)
よろしければ「.htaccessの設定」の意味を教えて頂けますでしょうか。


あ、失礼・・ちょっと動作(というか意図)がつかめてなかったので、もし「サーバでBASIC認証を使うなら.htaccessを書いて・・」と思っただけです。サーバでの認証結果をphpで利用する場合ですね。phpでHTTP認証してしまうのであれば、.htaccessの設定は不要です。ただしそうなると前述のマニュアルにあるとおり
引用:
この動作は、HTTP Basic 認証の標準に基づいていません。よって、この機能に 依存しないように注意する必要があります。

ということですね。
1

スキルアップ/キャリアアップ(JOB@IT)