HTTP身份验证PHP和HTML表单

HTTP身份验证PHP和HTML表单,php,html,forms,apache,http,Php,Html,Forms,Apache,Http,早上好!我对PHP的HTTP身份验证有一些问题。正如我在不同的帖子中发现的,在表单提交后,我尝试了以下PHP代码: PHP <?php $us = 'name'; $pswd = 'pass'; function verify($a, $b) { return ($a==$us && $b==$pswd);}; $user = $_SERVER['PHP_AUTH_USER']; $password = $_SERVER['PHP_AUTH_PW']; if(!isset

早上好!我对PHP的HTTP身份验证有一些问题。正如我在不同的帖子中发现的,在表单提交后,我尝试了以下PHP代码:

PHP

<?php 
$us = 'name';
$pswd = 'pass';
function verify($a, $b) { return ($a==$us && $b==$pswd);};
$user = $_SERVER['PHP_AUTH_USER'];
$password = $_SERVER['PHP_AUTH_PW'];
if(!isset($user) || verify($user, $password)==false) {
    header('WWW-Authenticate: Basic realm="MyRealm"');
    header('HTTP/1.1 401 Unauthorized');
    exit;
}
else{
    echo 'Correctly authenticated';
}
?>

我认为在进行基本身份验证时不需要HTML表单

只要依赖浏览器表单,您就可以了

编辑

<?php 
$us = 'name';
$pswd = 'pass';
function verify($a, $b) { return ($a==$us && $b==$pswd);};
$user = $_SERVER['PHP_AUTH_USER'];
$password = $_SERVER['PHP_AUTH_PW'];
if(!isset($user) || verify($user, $password)==false) {
    header('WWW-Authenticate: Basic realm="MyRealm"');
    header('HTTP/1.1 401 Unauthorized');
    exit;
}
else{
    echo 'Correctly authenticated';
}
?>
我建议删除WWW-Authenticate标头,并依赖您自己的身份验证过程(保留您的HTML):


问题在于您的isset$用户,您需要像下面的示例代码一样检查用户

$user = $_SERVER['PHP_AUTH_USER'];
$password = $_SERVER['PHP_AUTH_PW'];
if(!isset($user)) {
  header('WWW-Authenticate: Basic realm="MyRealm"');
  header('HTTP/1.1 401 Unauthorized');
}

if(isset($user)) {
  $us = 'name';
  $pswd = 'pass';
  if($user == $us && $password == $pswd){
    echo 'Correctly authenticated';
  }else{
   header('WWW-Authenticate: Basic realm="MyRealm"');
   header('HTTP/1.1 401 Unauthorized');
  }
}
浏览评论中提供的详细信息-

1) You can not set the html input field directly in your "Basic authentication"`
2) Before the webpage load all the data basic authentication 
   comes in front of browser and webserver

所以,您不能通过输入字段自动填写基本身份验证

我也尝试过,但它会再次循环询问我的用户名和密码,即使写了“name”和“pass”。我需要做一个简单的登录表单,就像我可以用post方法做的那样,但是使用http。例如,当我登录我的大学页面时,我只需填写表单并提交,没有其他弹出窗口,而且它使用HTTP(我认为是HTTPS,但我不太确定)。我怎么能做这样的事情呢?这样我就可以随心所欲地从帖子中保留数据。但是HTTP身份验证在哪里?我想说,我不从PHP_AUTH_用户那里获取数据,我认为这是从HTTP进行身份验证的方法。这样看来,它似乎是一种正常形式的身份验证。我错了吗?非常感谢。嗯,我按照你的建议更改了代码:它可以工作!我对此有一些问题。我想我在出现的弹出窗口中设置了$服务器['PHP\u AUTH\u USER']。如何直接从HTML格式的表单执行此操作?例如,当我在大学里登录我的个人页面时,就会发生这种情况。我可以从设置$\u服务器[etc]的php页面传递给我传递给表单的值吗?非常感谢。编辑:我不知道为什么,但关闭浏览器后,它不再工作。我认为$\u服务器['PHP\u AUTH\u USER')已被删除,但我对此不确定。
1) You can not set the html input field directly in your "Basic authentication"`
2) Before the webpage load all the data basic authentication 
   comes in front of browser and webserver