3

私は、htpasswd で HTTP 基本認証を使用することになっているこのサイトに取り組んできました。認証自体は魔法のように機能しますが、時々 (常にではありません) $_SERVER['PHP_AUTH_USER'] が空です。

代わりにREMOTE_USERを使用することをお勧めしましたが、これも時々しか機能しません。私は PHP を Apache の CGI プラグインとして使用していますが、残念ながらそれ以外は問題外です。このサイトは、HTTPS 経由で暗号化された SSL で提供されます。

なぜこうなった?

4

1 に答える 1

3

正確な解決策はありませんが、役立つアイデアがいくつかあります。

$user = !empty($_SERVER['PHP_AUTH_USER'])
      ? $_SERVER['PHP_AUTH_USER']
      : $_SERVER['REMOTE_USER'];

…いいスタートです。を使用していない場合Basic Realm Authenticationは、 で遊ぶ必要があることに注意してDigest Realm Authentication $_SERVER['PHP_AUTH_DIGEST']ください。

最初に、変数がオーバーライドされず、適切な場所でチェックされないように注意する必要があります。誰かが入力しなかった場合、ユーザー名が空である可能性もあります。

認証が成功しなかった場合は、必ずConnection: closeヘッダーを送信する必要があります。

現象をデバッグするには、ログ ファイルに書き込むか、次のテキストを含むメールを自分宛てに送信して、さらに調査する必要があります。

// variables from http://php.net/manual/en/language.variables.superglobals.php
$log = var_export(array($_SERVER, $_REQUEST, $_COOKIES, $_SESSION), true);

私はまた、cgi と組み合わせて、ユーザー名を含む他の変数セットがあることを読みました

ユーザー情報を含む可能性のあるその他の変数 (上記の回答から取得):

$_SERVER['REDIRECT_HTTP_AUTHORIZATION']
$_SERVER['REDIRECT_REMOTE_USER']
于 2013-10-21T14:54:53.967 に答える