HTTP-Authentifizierung mit PHP-und HTML-form

Guten morgen! Ich habe einige Probleme mit HTTP-Authentifizierung mit PHP. Da ich in verschiedenen posts, nachdem das Formular ist einzureichen ich hab diesen PHP-code:

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';
}
?>

Wenn ich auf den submit-botton form von HTML ein popup erscheint und fragt mich (wieder) mit Benutzername und Passwort. Warum? Ich denke, dass in gewisser Weise habe ich um die PHP_AUTH_USER in $_SERVER mit dem Wert in der Eingabe, aber ich weiß nicht, wie.
Ich denke, dass ich getan habe, ein Fehler, wenn ich das senden der Daten aus dem Formular, weil ich bin immer noch mit der post-Methode. Welche Methode muss ich verwenden?

HTML

<br>
<form method="post" action="page.php">
   <input type="text" name="user">
   <input type="password" name="password">
   <input type="submit">
</form>
<br>

Hab ich nie vor, irgendwelche Tipps, wie die Prüfung der Daten auf der server-Seite oder etwas anderes, sind willkommen!

InformationsquelleAutor A. Wolf | 2016-05-24

 

2 Replies
  1. 2

    Gut problem ist, mit dem isset $Benutzer, den Sie überprüfen müssen, um Benutzer, wie in diesem Beispiel-code

    $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');
      }
    }

    , Indem Sie durch die Angaben in den Kommentar –

    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

    So, Sie können nicht autofill-basic-Authentifizierung durch Eingabe Feld

    • Gut, änderte ich den code, wie Sie vorschlagen: es funktioniert! Ich habe einige Fragen zum dass. Ich denke, dass ich die $_SERVER[‚PHP_AUTH_USER‘] in dem popup, das erscheint. Wie kann ich direkt aus meinem Formular in HTML? Das ist, was passiert zum Beispiel, wenn ich mich einlogge auf meine persönliche Seite an der Universität. Kann ich den pass von einer php-Seite, die festlegen, dass $_SERVER[etc] zu den Wert, den ich an das Formular übergeben? Danke!!!
    • EDIT: ich weiß nicht, warum, aber nach dem schließen von browser funktioniert es nicht wieder. Ich denke, dass $_SERVER[‚PHP_AUTH_USER‘) gelöscht wurde, aber ich bin mir nicht sicher.
  2. 0

    Ich glaube, Sie brauchen nicht die HTML-form, wenn dabei die Grundlegende Authentifizierung.

    Nur verlassen sich auf die browser-form, und Sie werden ok.

    BEARBEITEN

    Ich würde empfehlen, das entfernen WWW-Authenticate-Header, und verlassen Sie sich auf Ihre eigenen Authentifizierungs-Verfahren (Halten Sie Ihre HTML):

    <?php 
    $us = 'name';
    $pswd = 'pass';
    function verify($a, $b) { return ($a==$us && $b==$pswd);};
    $user = $_POST['user'];
    $password = $_POST['password'];
    if(!isset($user) || verify($user, $password)==false) {
      header('HTTP/1.1 401 Unauthorized');
      exit;
      //You also can redirect to the login page instead:
      //header("Location: myLoginPage.php");
    }
    else{
        echo 'Correctly authenticated';
    }

    Halten Sie auch im Verstand, den Sie möchten, mit zu arbeiten einige session-Persistenz, cookies können auch arbeiten.

    • Ich versuchte es auch, aber es Schleifen und fragt mich, wieder Benutzernamen und das Kennwort ein, auch wenn schrieb ’name‘ und ‚pass‘. Ich brauche ein einfaches login-Formular, wie ich es machen kann mit der Methode post, sondern per http. Zum Beispiel, wenn ich mich einlogge auf meine Uni-Seite habe ich nur das Formular ausfüllen und Absenden, ohne popups und verwendet HTTP (ich denke, HTTPS, aber ich bin mir nicht so sicher). Wie kann ich so etwas machen?
    • Auf diese Weise behalte ich die Daten von der post wie ich wollte. Aber wo ist die HTTP-Authentifizierung? Ich möchte sagen, ich habe keine Daten von PHP_AUTH_USER, ich dachte, dass es die Möglichkeit zur Authentifizierung von HTTP. Auf diese Weise scheint es wie ein normales Formular-Authentifizierung. Bin ich falsch? Danke!!!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.