2016-05-24 7 views
1

おはようございます! PHPでHTTP認証に問題があります。フォームのは、送信した後、私は、別の記事で見たよう私はこのPHPコードを試みた:HTTP認証PHPおよびHTML形式

PHPを私はポップアップが私を求めて表示されます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'; 
} 
?> 

(再び)ユーザ名とパスワード。どうして?私はいくつかの点で、PHP_AUTH_USERを$ _SERVERに入力値で設定しなければならないと考えていますが、私はその方法を知らないのです。
私はpostメソッドを使用しているので、フォームからデータを送信するときに間違いを犯したと思います。どのような方法を使用する必要がありますか?私は前にそれをやったことがない

HTML

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

、サーバ側または何か他のものにデータを確認する方法上の任意のヒントを歓迎します!

答えて

2

さて問題は、あなたがコメントで提供詳細を経由することで、このサンプルコード

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

のようなユーザーをチェックする必要があり、あなたのISSETの$ユーザである - あなたは、そう

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 

入力フィールドを使って基本認証を自動入力できない

+0

さて、私はあなたが示唆するようにコードを変更しました:それは動作します!私はそれについていくつか質問があります。表示されるポップアップに$ _SERVER ['PHP_AUTH_USER']を設定したと思います。どうすれば私のフォームから直接HTMLでそれを行うことができますか?それは、たとえば私が大学の私の個人ページにログインするときに起こることです。その$ _SERVER [etc]をフォームに渡す値に設定したPHPページから渡すことはできますか?ありがとうございました! –

+0

編集:理由はわかりませんが、ブラウザを閉じた後に再び動作しません。 $ _SERVER ['PHP_AUTH_USER')は削除されていると思いますが、それについては分かりません。 –

+0

@ user2993413私の編集した回答をご覧ください – rocky

0

基本認証を行うときにHTMLフォームは必要ありません。

ブラウザのフォームに頼るだけでOKです。

EDIT

私は(あなたのHTMLをしてください)WWW認証ヘッダを削除するお勧めします、そしてあなた自身の認証プロセスに依存しています:

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

あなたには、いくつかのと協力したいと思います。また心に留めておきますセッションの永続性、クッキーも機能します。

+0

私も試しましたが、「名前」と「パス」を書いてもユーザー名とパスワードを再度尋ねてループします' 私はメソッドポストではできるが、httpを使用すると、単純なログインフォームを行う必要があります。たとえば、私の大学のページにログインするときには、フォームに記入して、他のポップアップを使わずに送信し、HTTPを使用します(HTTPSだと思いますが、私はそれほど確信していません)。どのように私はそのようなことをすることができますか? –

+0

このようにして、私は望むとおりに投稿からデータを保持します。しかし、HTTP認証はどこですか?私はPHP_AUTH_USERからデータを取得しないと言いたいと思いますが、HTTPから認証する方法だと思いました。そうすれば、通常のフォーム認証のように見えます。私が間違っている?ありがとうございました! –

関連する問題