2011-08-02 7 views
0

PHPでは、基本的なHTTP認証ログイン(ポップアップ)を作成しようとしています。その私の理解では、このヘッダを介して行われ、これが私のヘッダである:PHPでHTTP認証を使用すると、「キャンセル」を押すまで閉じないのはなぜですか?

header("WWW-Authenticate: Basic realm='Secure Area'"); 

はその後、私は入力のユーザー名またはパスワードが間違っているかどうかを確認し、それがある場合、私は一つの機能または別のコマンドを実行します。

私は自分のコードをテストしかし
if ($_SERVER["PHP_AUTH_USER"] != $username || $_SERVER["PHP_AUTH_PW"] != $password) 
{ 
    quit(); 
} 
else 
{ 
    main(); 
} 

、と私は、ログインポップアップボックス「でログイン」正しいユーザ名とパスワードを入力してを押しますもう一度開き、二度目のオープニングの後、私は「キャンセル」を押すことができ、主な機能の結果に私はかかりますが、「ログイン」を押し続けるだけでポップアップが維持されます。

それ以外は正常に動作します。ユーザー名またはパスワードを正しく入力せずに「キャンセル」を押すと、それが終了します。しかし、私はこの一見「エンドレスログイン」の問題を解決する必要があります。

どうすれば修正できますか?

+0

Googleのクイックルックは、認証サーバのvarsが、cgiモードでPHPが実行されていると設定されないというヒントを示しています。 – Yoshi

答えて

3

ユーザーが認証された後でも、認証ヘッダーを再送信しているようです。 quit()の代わりに、header()呼び出しをifブロックに移動します。

+0

これは正しい答えだと思うが、私はいくつか追加しなければならない:PHPマニュアルから: "領域文字列は二重引用符で囲まれていなければならない"とヘッダヘッダ( 'HTTP/1.0 401 Unauthorized ');あまりにも。もう1つの点:ダイジェスト認証を使用するか、SSLを使用する必要があります。この認証タイプは非常に安全です:ユーザー名/パスワードはプレーンテキスト(base64エンコード)で送信されます。 – XzKto

関連する問題