ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルでユーザー ID 認証を実装する 2 つの方法

PHP_PHP チュートリアルでユーザー ID 認証を実装する 2 つの方法

WBOY
WBOYオリジナル
2016-07-21 15:29:27874ブラウズ

訪問者が保護されたページを閲覧すると、クライアント ブラウザはダイアログ ウィンドウをポップアップ表示し、ユーザー名とパスワードを入力してユーザーの身元を確認し、ユーザーがページにアクセスする権利があるかどうかを判断するように求めます。その実装原理を説明するために 2 つの方法が使用されます。
1. HTTP ヘッダーを使用して実現します
ヘッダーは、HTTP プロトコルを使用して HTML 情報をブラウザーに送信する前にサーバーによって送信される文字列です。 HTTP は、チャレンジ/レスポンス モデルを使用して、パスワードで保護された領域に入ろうとするユーザーを認証します。具体的には、ユーザーが初めて保護領域にアクセスするリクエストを WEB サーバーに送信すると、チャレンジ プロセスが開始され、サーバーはユーザーの身元が確認されていないことを示す特別な 401 ヘッダーを返します。上記の応答を検出すると、クライアント ブラウザはユーザー名とパスワードの入力を求めるダイアログ ボックスを自動的に表示します。ユーザーが入力を完了して「OK」をクリックすると、ユーザーの識別情報が検​​証のためにサーバーに送信されます。ユーザーが入力したユーザー名とパスワードが有効な場合、WEB サーバーはユーザーが保護領域に入るのを許可し、アクセス プロセス全体を通じてユーザーの ID の有効性を維持します。逆に、ユーザーが入力したユーザー名またはパスワードが検証できない場合、クライアントのブラウザは入力ウィンドウを継続的にポップアップ表示し、ユーザーに正しい情報を再度入力するよう求めます。ユーザーが正しい情報の場所を入力するまで、プロセス全体が続行されます。これを超えると、ユーザーのアクセス要求は自動的に拒否されます。
PHP スクリプトでは、関数 header() を使用して HTTP ヘッダーをクライアントのブラウザに直接送信します。これにより、ユーザー名とパスワードの入力ウィンドウがクライアント上に自動的にポップアップ表示され、ID 認証機能が実装されます。 PHP では、クライアント ユーザーが入力した情報は、サーバーに送信された後、3 つのグローバル変数 $PHP_AUTH_USER、$PHP_AUTH_PW、および $PHP_AUTH_TYPE に自動的に保存されます。これら 3 つの変数を使用すると、データ ファイルまたはデータベースに保存されているユーザー アカウント情報に基づいてユーザーの身元を確認できます
ただし、ユーザーは、$PHP_AUTH_USER はモジュール モードでインストールされた PHP、$ PHP_AUTH_PW でのみ使用できることに注意してください。と $PHP_AUTH_TYPE は 3 つの変数です。ユーザーが PHP を CGI モードで使用している場合、検証機能は実装できません。 PHP のモジュールのインストール方法はこのセクションの最後に添付されています。
次に、Mysql データベースを使用してユーザーの ID を保存します。各アカウントのユーザー名とパスワードをデータベースから抽出し、$PHP_AUTH_USER 変数と $PHP_AUTH_PW 変数と比較してユーザーの信頼性を判断する必要があります。
まず、MySqlでユーザー情報を保存するデータベースを作成します
データベース名はXinXiKu、テーブル名はuser; テーブル定義は次のとおりです:

コードをコピーします コードは次のとおりです。
create table user(
ID INT(4) NOT NULL AUTO_INCREMENT,
name VARCHAR(8) NOT NULL,
password CHAR(8) NOT NULL,
PRIMARY KEY(ID)
)

説明:
1. ID はゼロではなく、自動的に増加する主キーです。 2. 名前はユーザー名であり、空にすることはできません。 3. パスワードはユーザーのパスワードであり、空にすることはできません。検証ファイルlogin.php



コードをコピー
コードは次のとおりです: //ユーザー名が設定されているかどうかを確認します if(!isset($PHP_AUTH_USER))
{
header("WWW-Authenticate:Basic realm="認証関数"");
header("HTTP/1.0 401 Unauthorized");
echo "認証に失敗しました。ネットワーク リソースを共有する権限がありません!";
exit();
}
/*接続先Database*/
$db=mysql_connect("localhost","root"," ");
//データベースを選択
mysql_select_db("XinXiKu",$db);
$result=mysql_query ("SELECT * FROM user where name='$PHP_AUTH_USER' and password='$PHP_AUTH_PW '",$db);
if ($myrow = mysql_fetch_row($result))
{
//以下は成功後の関連操作です。認証
...
}
else
{
//認証に失敗し、ユーザーに再入力を求める
header("WWW-Authenticate:Basic realm="Authentication function"");
header("HTTP/1.0 401権限がありません");
echo "認証に失敗しました。ネットワーク リソースを共有する権限がありません! ";
exit();
}
?>


プログラムの説明:
プログラムでは、まず変数 $PHP_AUTH_USER が設定されているかどうかを確認します。設定されていない場合、スクリプトは HTTP 401 エラー番号ヘッダーを送信して、クライアントのブラウザに認証ウィンドウが表示され、ユーザー名と入力を求められます。入力が完了すると、接続データベースはユーザー名とパスワードが正しいかどうかを照会し、正しい場合はログインによる関連操作の実行を許可します。
関数説明:
1. isset(): 変数に値が割り当てられているかどうかを判断するために使用されます。変数値が存在するかどうかに応じて、true または false を返します
2. header(): 特定の HTTP ヘッダーを送信するために使用されます。 header() 関数を使用する場合は、実際の出力を生成する HTML または PHP コードの前に必ずこの関数を呼び出してください。
3. mysql_connect(): MySQL サーバー接続を開きます。
4. mysql_db_query(): クエリ文字列(query)をMySQLデータベースに送信します。
5. mysql_fetch_row(): 単一列の各フィールドを返します。
2. セッションを使用してサーバー検証を実装する
認証が必要なページには、Apache サーバー検証を使用するのが最適です。ただし、Apache サーバー検証のインターフェイスは十分に使いやすいものではありません。また、CGI モードの PHP および IIS 下の PHP は、Apache サーバーを使用して検証できません。このようにして、セッションを使用して異なるページ間でユーザーの ID を保存し、ID 検証を行うことができます。
バックエンドでは、ユーザー情報を保存するために上記の Mysql データベースも使用します。
まずユーザーログインインターフェースを書きます。ファイル名はlogin.php、コードは次のとおりです:
コードをコピーします コードは次のとおりです:


ユーザー名:

パスワード:

< input type="submit" value="Login">


login1.php は送信されたフォームを処理します。コードは次のとおりです。
コードをコピーします。
$db=mysql_connect("localhost", "root","");
mysql_select_db("XinXiKu",$db);
$result=mysql_query("SELECT * FROM user where name='$name' and password='$pass'",$db);
if ($myrow = mysql_fetch_row($result))
{
//登録ユーザー
session_start();
session_register("user");
$user=$myrow ["user"];
// 本人確認に成功しました。関連する操作を実行します
...
}
else
{
echo "認証に失敗しました。ネットワーク リソースを共有する権限がありません!"
}
?>

ここで、ユーザーは次の Use **http://domainname/next.php?user=username** を使用して認証をバイパスできることに注意してください。したがって、以降の操作では、まず変数が登録されているかどうかを確認する必要があります。登録されている場合は、対応する操作を実行します。登録されていない場合は、不正ログインとみなされます。関連するコードは次のとおりです:


コードをコピーします
コードは次のとおりです: session_start();
if (!session_is_registered("user"))
{
echo "認証に失敗しました。不正なログインです。 ";
}
else
{
//関連する操作を実行するために正常にログインしました
...
}
?>


付録:モジュールモードでPHPをインストールする方法
1.まず、ファイルmod_php4-4.0.1-pl2をダウンロードします。 [PHP4 ではない場合は、できるだけ早くアップグレードしてください! ]
解凍後、mod_php4.dll、mod_php4.conf、readme.txt の 3 つのファイルがあります
2. 関連ファイルをコピーします
mod_php4.dll を Apache のインストール先にコピーしますmodules ディレクトリの下にある
mod_php4.conf を Apache インストール ディレクトリの conf ディレクトリにコピーする
msvcrt.dll ファイルを Apache インストール ディレクトリにコピーする
3. conf/srm.conf ファイルを開き、次の文を追加します
Include conf/ mod_php4.conf
これを行う前に、httpd.conf 内の CGI モードに関する設定ステートメント、つまり次のような部分をすべて削除してください。
ScripAlias /php4/ "C:/php4/"
AddType アプリケーション/x -httpd-php4 .php
AddType application/x-httpd-php4 .php3
AddType application/x-httpd-php4 .php4
Action application/x-httpd-php4 /php4/php.exe
PHP サポートを行うには複数のサフィックスでも問題ありません。指定された設定ファイル mod_php4.conf はすでに php、php3、および php4 の 3 つのサフィックスをサポートしています。さらに多くのサフィックスをサポートしたい場合は、このファイルを変更するだけです。
4. テスト
を使用します。 Server API の値が cgi ではなく apache であることがわかります。また、HTTP ヘッダー情報に関する情報もあります。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/323409.html技術記事訪問者が保護されたページを閲覧すると、クライアントのブラウザはダイアログ ウィンドウをポップアップ表示し、ユーザー名とパスワードを入力してユーザーの身元を確認し、ユーザーにアクセスする権利があるかどうかを判断します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。