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

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

Jul 21, 2016 pm 03:29 PM
php 守る 成し遂げる クライアント 対話 ポップアップ 方法 時間 ブラウズ ブラウザ ユーザー 認証 ページ

訪問者が保護されたページを閲覧すると、クライアント ブラウザはダイアログ ウィンドウをポップアップ表示し、ユーザー名とパスワードを入力してユーザーの身元を確認し、ユーザーがページにアクセスする権利があるかどうかを判断するように求めます。その実装原理を説明するために 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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 Apr 06, 2025 am 12:03 AM

PHP8では、一致式は、式の値に基づいて異なる結果を返す新しい制御構造です。 1)Switchステートメントに似ていますが、実行ステートメントブロックの代わりに値を返します。 2)一致式の式は厳密に比較され、セキュリティが向上します。 3)スイッチステートメントの脱落の可能性を回避し、コードのシンプルさと読みやすさを向上させます。

CSSを介してサイズ変更シンボルをカスタマイズし、背景色で均一にする方法は? CSSを介してサイズ変更シンボルをカスタマイズし、背景色で均一にする方法は? Apr 05, 2025 pm 02:30 PM

CSSでサイズ変更シンボルをカスタマイズする方法は、背景色で統一されています。毎日の開発では、調整など、ユーザーインターフェイスの詳細をカスタマイズする必要がある状況に遭遇することがよくあります...

クロスサイトリクエストフォーファリー(CSRF)とは何ですか?また、PHPにCSRF保護をどのように実装しますか? クロスサイトリクエストフォーファリー(CSRF)とは何ですか?また、PHPにCSRF保護をどのように実装しますか? Apr 07, 2025 am 12:02 AM

PHPでは、予測不可能なトークンを使用して、CSRF攻撃を効果的に防ぐことができます。特定の方法には次のものが含まれます。1。フォームのCSRFトークンを生成および埋め込みます。 2.リクエストを処理するときにトークンの有効性を確認します。

PHP関数引数と配列の開梱で...(SPLAT)演算子の目的と使用について説明してください。 PHP関数引数と配列の開梱で...(SPLAT)演算子の目的と使用について説明してください。 Apr 06, 2025 am 12:07 AM

PHPの...(SPLAT)演算子は、機能パラメーターと配列を開梱するために使用され、コードのシンプルさと効率を向上させます。 1)関数パラメーター解放:アレイ要素をパラメーターとして関数に渡します。 2)配列の開梱:アレイを別の配列または関数パラメーターに解除します。

Webページにローカルにインストールされている「Jingnan Mai Round Body」を正しく表示するにはどうすればよいですか? Webページにローカルにインストールされている「Jingnan Mai Round Body」を正しく表示するにはどうすればよいですか? Apr 05, 2025 pm 10:33 PM

最近、Webページにローカルにインストールされたフォントファイルを使用して、インターネットから無料のフォントをダウンロードし、システムに正常にインストールしました。今...

どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) Apr 08, 2025 am 12:03 AM

PHPでは、最終的なキーワードを使用して、クラスが継承されないようにし、メソッドが上書きされます。 1)クラスを決勝としてマークする場合、クラスを継承することはできません。 2)メソッドを最終的にマークする場合、メソッドはサブクラスによって書き換えられません。最終的なキーワードを使用すると、コードの安定性とセキュリティが保証されます。

フレックスレイアウトの下のテキストは省略されていますが、コンテナは開かれていますか?それを解決する方法は? フレックスレイアウトの下のテキストは省略されていますが、コンテナは開かれていますか?それを解決する方法は? Apr 05, 2025 pm 11:00 PM

フレックスレイアウトとソリューションの下でのテキストの過度の省略によるコンテナの開口部の問題が使用されます...

ネガティブマージンが場合によっては効果がないのはなぜですか?この問題を解決する方法は? ネガティブマージンが場合によっては効果がないのはなぜですか?この問題を解決する方法は? Apr 05, 2025 pm 10:18 PM

なぜマイナスマージンが場合によっては有効にならないのですか?プログラミング中、CSSの負のマージン(負...

See all articles