为什么我在PHP中使用HTTP身份验证时,它不会';直到我按下";取消;?

为什么我在PHP中使用HTTP身份验证时,它不会';直到我按下";取消;?,php,http-authentication,Php,Http Authentication,在PHP中,我试图创建一个基本的HTTP身份验证登录(弹出的登录)。据我所知,这是通过标题完成的,这是我的标题: header("WWW-Authenticate: Basic realm='Secure Area'"); 之后,我检查输入的用户名或密码是否不正确,如果是,我执行一个或另一个函数: if ($_SERVER["PHP_AUTH_USER"] != $username || $_SERVER["PHP_AUTH_PW"] != $password) { quit(); }

在PHP中,我试图创建一个基本的HTTP身份验证登录(弹出的登录)。据我所知,这是通过标题完成的,这是我的标题:

header("WWW-Authenticate: Basic realm='Secure Area'");
之后,我检查输入的用户名或密码是否不正确,如果是,我执行一个或另一个函数:

if ($_SERVER["PHP_AUTH_USER"] != $username || $_SERVER["PHP_AUTH_PW"] != $password)
{
    quit();
}
else
{
    main();
}
然而,当我测试我的代码,输入正确的用户名和密码,然后按“登录”时,登录弹出框会再次打开,第二次打开后,我可以按“取消”并返回主功能的结果,但如果我一直按“登录”,它会一直弹出

除此之外,它工作正常。如果我在没有正确输入用户名或密码的情况下按“取消”,它将退出。然而,我需要解决这个看似“无止境登录”的问题


如何修复它?

我猜即使在用户经过身份验证之后,您也在重新发送身份验证标头。将header()调用移到if块中,而不是quit()

我猜即使用户已通过身份验证,您也在重新发送身份验证标头。将header()调用移到if块中,而不是quit()

快速查看google会提示,如果php在cgi模式下运行,auth服务器变量将不会设置,这可能就是问题所在?快速查看google会提示,如果php在cgi模式下运行,auth服务器变量将不会设置,这可能就是问题所在?我认为这是正确的答案,但我必须补充一些东西:从PHP手册中:“领域字符串必须用双引号(而不是单引号)括起来”,并且您应该添加header('HTTP/1.0');也还有一件事:您应该使用摘要授权或使用SSL,因为这种授权类型是非常不安全的:用户名/密码以纯文本(base64编码)传输。我认为这是正确的答案,但我必须补充一些东西:从PHP手册中:“领域字符串必须用双引号(而不是单引号)括起来”您应该添加header('HTTP/1.0 401 Unauthorized');也还有一件事:您应该使用摘要授权或使用SSL,因为这种授权类型非常不安全:用户名/密码以纯文本(base64编码)传输。