PHP チュートリアル.応用例 12
チュートリアル|アプリケーション例
PHP でユーザー ID 認証を実装する方法 2 (1)
サイトを設計および保守するとき、ユーザーは多くの場合、特定の重要なファイルまたは情報へのアクセスを制限する必要があります。通常、WEBサーバーに組み込まれたHTTPプロトコルによるユーザー認証機構を利用できます。訪問者が保護されたページを閲覧すると、クライアント ブラウザはダイアログ ウィンドウをポップアップ表示し、ユーザー名とパスワードを入力してユーザーの身元を確認し、ユーザーがページにアクセスする権利があるかどうかを判断するように求めます。その実装原理を説明するために 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_TYPE が 3 つの変数です。ユーザーが PHP を CGI モードで使用している場合、検証機能は実装できません。 PHP のモジュールのインストール方法はこのセクションの最後に添付されています。
以下では、Mysql データベースを使用してユーザーの ID を保存します。各アカウントのユーザー名とパスワードをデータベースから抽出し、$PHP_AUTH_USER 変数と $PHP_AUTH_PW 変数と比較してユーザーの信頼性を判断する必要があります。
まず、ユーザー情報を保存するデータベースを MySql に作成します。データベース名は 8) NOT NULL、
パスワード CHAR(8) NOT NULL、
PRIMARY KEY(ID)
)
説明:
1。はゼロではなく、自動的に増加するシリアル番号です。
2、name はユーザーのパスワードであり、空にすることはできません。以下はユーザー認証ファイルですlogin.php
//ユーザー名が設定されているかどうかを判定します
if(!isset($PHP_AUTH_USER ))
{
header("WWW-Authenticate:Basic realm="認証関数"") ;
header("HTTP/1.0 401 Unauthorized");
echo "認証に失敗しました。ネットワーク リソースを共有する権限がありません!" ;
exit();
}
/*データベースに接続*/
$db=mysql_connect ("localhost","root","");
//データベースを選択
mysql_select_db("XinXiKu",$db);
//ユーザーが存在するかどうかをクエリ
$result=mysql_query("SELECT * FROM user where name ='$PHP_AUTH_USER' およびパスワード='$PHP_AUTH_PW'",$db);
if ($myrow = mysql_fetch_row($result))
{
//以下は認証成功後の関連操作です
...
}
else
{
//認証が失敗した場合、ユーザーは再入力を求められます
header("WWW-Authenticate:Basic realm="Authentication function "");
header("HTTP/1.0 401 Unauthorized"); echo "認証に失敗しました。ネットワーク リソースを共有する権限がありません!";
}
?>
プログラムの説明:
まず、変数 $PHP_AUTH_USER が設定されているかどうかを確認します。セット。設定されていない場合、スクリプトは HTTP 401 エラー番号ヘッダーを送信して、クライアントのブラウザに認証ウィンドウが表示され、ユーザー名と入力を求められます。入力が完了したら、接続データベースはユーザー名とパスワードが正しいかどうかを確認し、正しい場合はログインを許可し、間違っている場合は引き続きユーザー名とパスワードの入力を要求します。
関数の説明:
1. isset(): 変数に値が割り当てられているかどうかを判断するために使用されます。変数値が存在するかどうかに応じて、true または false を返します
2. header(): 特定の HTTP ヘッダーを送信するために使用されます。 header() 関数を使用する場合は、実際の出力を生成する HTML または PHP コードの前に必ずこの関数を呼び出してください。
3. mysql_connect(): MySQL サーバー接続を開きます。
4. mysql_db_query(): クエリ文字列 (クエリ) を MySQL データベースに送信します。
5. mysql_fetch_row(): 単一の列の各フィールドを返します。
2. セッションを使用してサーバー検証を実装する
認証が必要なページの場合は、Apache サーバー検証を使用するのが最適です。ただし、Apache サーバー検証のインターフェイスは十分に使いやすいものではありません。また、CGI モードの PHP および IIS 下の PHP は、Apache サーバーを使用して検証できません。このようにして、セッションを使用して異なるページ間でユーザーの ID を保存し、ID 検証を行うことができます。
バックエンドでは、上記の Mysql データベースを使用してユーザー情報を保存します。
最初にユーザー ログイン インターフェイスを作成します。ファイル名はlogin.phpで、コードは次のとおりです。
______________________________________________________________
__________________________________________________________________
login1.php は送信されたフォームを処理します。コードは次のとおりです:
$db=mysql_connect("localhost","root","");
mysql_select_db("XinXiKu" ,$db);
$result=mysql_query("SELECT * FROM user where name='$name' andpassword='$pass'",$db);
if ($myrow = mysql_fetch_row($ result))
{
//ユーザーを登録します
session_start();
session_register("user");
$user=$myrow["user"];
// 本人確認が成功しました、関連する操作を実行します
...
}
else
{
echo "認証に失敗しました。ネットワーク リソースを共有する権限がありません!";
}
?> ここで、ユーザーは **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 ファイルを開き、 add 前の文
Include conf/mod_php4.conf
これを行う前に、次の部分に似た httpd.conf 内の CGI モードに関する設定ステートメントをすべて削除してください
ScripAlias /php4/ "C: /php4/"
AddType application/x-httpd-php4 .php

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









MySQLは、インストールが簡単で、強力で管理しやすいため、初心者に適しています。 1.さまざまなオペレーティングシステムに適した、単純なインストールと構成。 2。データベースとテーブルの作成、挿入、クエリ、更新、削除などの基本操作をサポートします。 3.参加オペレーションやサブクエリなどの高度な機能を提供します。 4.インデックス、クエリの最適化、テーブルパーティション化により、パフォーマンスを改善できます。 5。データのセキュリティと一貫性を確保するために、バックアップ、リカバリ、セキュリティ対策をサポートします。

NAVICATプレミアムを使用してデータベースを作成します。データベースサーバーに接続し、接続パラメーターを入力します。サーバーを右クリックして、[データベースの作成]を選択します。新しいデータベースの名前と指定された文字セットと照合を入力します。新しいデータベースに接続し、オブジェクトブラウザにテーブルを作成します。テーブルを右クリックして、データを挿入してデータを挿入します。

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

NAVICATでSQLを実行する手順:データベースに接続します。 SQLエディターウィンドウを作成します。 SQLクエリまたはスクリプトを書きます。 [実行]ボタンをクリックして、クエリまたはスクリプトを実行します。結果を表示します(クエリが実行された場合)。

手順に従って、NAVICATで新しいMySQL接続を作成できます。アプリケーションを開き、新しい接続(CTRL N)を選択します。接続タイプとして「mysql」を選択します。ホスト名/IPアドレス、ポート、ユーザー名、およびパスワードを入力します。 (オプション)Advanced Optionsを構成します。接続を保存して、接続名を入力します。

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

NAVICATがデータベースとそのソリューションに接続できない一般的な理由:1。サーバーの実行ステータスを確認します。 2。接続情報を確認します。 3.ファイアウォール設定を調整します。 4.リモートアクセスを構成します。 5.ネットワークの問題のトラブルシューティング。 6.許可を確認します。 7.バージョンの互換性を確保します。 8。他の可能性のトラブルシューティング。

データベースに接続するときの一般的なエラーとソリューション:ユーザー名またはパスワード(エラー1045)ファイアウォールブロック接続(エラー2003)接続タイムアウト(エラー10060)ソケット接続を使用できません(エラー1042)SSL接続エラー(エラー10055)接続の試みが多すぎると、ホストがブロックされます(エラー1129)データベースは存在しません(エラー1049)
