PHP チュートリアル.応用例 12
Jun 21, 2016 am 09:14 AMチュートリアル|アプリケーション例
PHP でユーザー ID 認(rèn)証を?qū)g裝する方法 2 (1)
サイトを設(shè)計(jì)および保守するとき、ユーザーは多くの場(chǎng)合、特定の重要なファイルまたは情報(bào)へのアクセスを制限する必要があります。通常、WEBサーバーに組み込まれたHTTPプロトコルによるユーザー認(rèn)証機(jī)構(gòu)を利用できます。訪問者が保護(hù)されたページを閲覧すると、クライアント ブラウザはダイアログ ウィンドウをポップアップ表示し、ユーザー名とパスワードを入力してユーザーの身元を確認(rèn)し、ユーザーがページにアクセスする権利があるかどうかを判斷するように求めます。その実裝原理を説明するために 2 つの方法が使用されます。
1. HTTP ヘッダーを使用して実裝する
ヘッダーは、HTTP プロトコルを使用して HTML 情報(bào)をブラウザーに送信する前にサーバーによって送信される文字列です。 HTTP は、チャレンジ/レスポンス モデルを使用して、パスワードで保護(hù)された領(lǐng)域に入ろうとするユーザーを認(rèn)証します。具體的には、ユーザーが初めて保護(hù)領(lǐng)域にアクセスするリクエストを WEB サーバーに送信すると、チャレンジ プロセスが開始され、サーバーはユーザーの身元が確認(rèn)されていないことを示す特別な 401 ヘッダーを返します。上記の応答を検出すると、クライアント ブラウザはユーザー名とパスワードの入力を求めるダイアログ ボックスを自動(dòng)的に表示します。ユーザーが入力を完了して「OK」をクリックすると、ユーザーの識(shí)別情報(bào)が検??証のためにサーバーに送信されます。ユーザーが入力したユーザー名とパスワードが有効な場(chǎng)合、WEB サーバーはユーザーが保護(hù)領(lǐng)域に入るのを許可し、アクセス プロセス全體を通じてユーザーの ID の有効性を維持します。逆に、ユーザーが入力したユーザー名またはパスワードが検証できない場(chǎng)合、クライアントのブラウザは入力ウィンドウを継続的にポップアップ表示し、ユーザーに正しい情報(bào)を再度入力するよう求めます。ユーザーが正しい情報(bào)の場(chǎng)所を入力するまで、プロセス全體が続行されます。これを超えると、ユーザーのアクセス要求は自動(dòng)的に拒否されます。
PHP スクリプトでは、関數(shù) header() を使用して HTTP ヘッダーをクライアントのブラウザーに直接送信します。これにより、ユーザー名とパスワードの入力ウィンドウがクライアント上に自動(dòng)的にポップアップ表示され、ID 認(rèn)証機(jī)能が実裝されます。 PHP では、クライアント ユーザーが入力した情報(bào)は、サーバーに送信された後、3 つのグローバル変數(shù) $PHP_AUTH_USER、$PHP_AUTH_PW、および $PHP_AUTH_TYPE に自動(dòng)的に保存されます。これら 3 つの変數(shù)を使用すると、データ ファイルまたはデータベースに保存されているユーザー アカウント情報(bào)に基づいてユーザーの身元を確認(rèn)できます
ただし、$PHP_AUTH_USER はモジュールとしてインストールされた PHP でのみ使用できることに注意してください。 、$PHP_AUTH_TYPE が 3 つの変數(shù)です。ユーザーが PHP を CGI モードで使用している場(chǎng)合、検証機(jī)能は実裝できません。 PHP のモジュールのインストール方法はこのセクションの最後に添付されています。
以下では、Mysql データベースを使用してユーザーの ID を保存します。各アカウントのユーザー名とパスワードをデータベースから抽出し、$PHP_AUTH_USER 変數(shù)と $PHP_AUTH_PW 変數(shù)と比較してユーザーの信頼性を判斷する必要があります。
まず、ユーザー情報(bào)を保存するデータベースを MySql に作成します。データベース名は 8) NOT NULL、
パスワード CHAR(8) NOT NULL、
PRIMARY KEY(ID)
)
説明:
1。はゼロではなく、自動(dòng)的に増加するシリアル番號(hào)です。
2、name はユーザーのパスワードであり、空にすることはできません。以下はユーザー認(rèn)証ファイルですlogin.php
//ユーザー名が設(shè)定されているかどうかを判定します
if(!isset($PHP_AUTH_USER ))
{
header("WWW-Authenticate:Basic realm="認(rèn)証関數(shù)"") ;
header("HTTP/1.0 401 Unauthorized");
echo "認(rèn)証に失敗しました。ネットワーク リソースを共有する権限がありません!" ;
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))
{
//以下は認(rèn)証成功後の関連操作です
...
}
else
{
//認(rèn)証が失敗した場(chǎng)合、ユーザーは再入力を求められます
header("WWW-Authenticate:Basic realm="Authentication function "");
header("HTTP/1.0 401 Unauthorized"); echo "認(rèn)証に失敗しました。ネットワーク リソースを共有する権限がありません!";
}
?>
プログラムの説明:
まず、変數(shù) $PHP_AUTH_USER が設(shè)定されているかどうかを確認(rèn)します。セット。設(shè)定されていない場(chǎng)合、スクリプトは HTTP 401 エラー番號(hào)ヘッダーを送信して、クライアントのブラウザに認(rèn)証ウィンドウが表示され、ユーザー名と入力を求められます。入力が完了したら、接続データベースはユーザー名とパスワードが正しいかどうかを確認(rèn)し、正しい場(chǎng)合はログインを許可し、間違っている場(chǎng)合は引き続きユーザー名とパスワードの入力を要求します。
関數(shù)の説明:
1. isset(): 変數(shù)に値が割り當(dāng)てられているかどうかを判斷するために使用されます。変數(shù)値が存在するかどうかに応じて、true または false を返します
2. header(): 特定の HTTP ヘッダーを送信するために使用されます。 header() 関數(shù)を使用する場(chǎng)合は、実際の出力を生成する HTML または PHP コードの前に必ずこの関數(shù)を呼び出してください。
3. mysql_connect(): MySQL サーバー接続を開きます。
4. mysql_db_query(): クエリ文字列 (クエリ) を MySQL データベースに送信します。
5. mysql_fetch_row(): 単一の列の各フィールドを返します。
2. セッションを使用してサーバー検証を?qū)g裝する
認(rèn)証が必要なページの場(chǎng)合は、Apache サーバー検証を使用するのが最適です。ただし、Apache サーバー検証のインターフェイスは十分に使いやすいものではありません。また、CGI モードの PHP および IIS 下の PHP は、Apache サーバーを使用して検証できません。このようにして、セッションを使用して異なるページ間でユーザーの ID を保存し、ID 検証を行うことができます。
バックエンドでは、上記の Mysql データベースを使用してユーザー情報(bào)を保存します。
最初にユーザー ログイン インターフェイスを作成します。ファイル名は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"];
// 本人確認(rèn)が成功しました、関連する操作を?qū)g行します
...
}
else
{
echo "認(rèn)証に失敗しました。ネットワーク リソースを共有する権限がありません!";
}
?> ここで、ユーザーは **http://domainname/next.php? を使用できることに注意してください。 user=username** を使用して認(rèn)証をバイパスします。したがって、以降の操作では、まず変數(shù)が登録されているかどうかを確認(rèn)する必要があります。登録されている場(chǎng)合は、対応する操作を?qū)g行します。登録されていない場(chǎng)合は、不正ログインとみなされます。関連するコードは次のとおりです:
session_start();
if (!session_is_registered("user"))
{
echo "認(rèn)証に失敗しました。不正なログインです!"
}
else
{
// ログインに成功しました。関連する操作
...
}
?>
付録: PHP をモジュール モードでインストールする方法
1. まず、ファイル mod_php4-4.0.1-pl2 をダウンロードします。 [PHP4 でない場(chǎng)合は、できるだけ早くアップグレードしてください!]
解凍後、mod_php4.dll、mod_php4.conf、readme.txt の 3 つのファイルが存在します
2. 関連ファイルをコピーします
mod_php4.dll を次の場(chǎng)所にコピーします。 apache インストールディレクトリの modules ディレクトリの下に
mod_php4.conf を Apache インストールディレクトリの conf ディレクトリにコピーします
msvcrt.dll ファイルを Apache インストールディレクトリにコピーします
3. conf/srm.conf ファイルを開き、 add 前の文
Include conf/mod_php4.conf
これを行う前に、次の部分に似た httpd.conf 內(nèi)の CGI モードに関する設(shè)定ステートメントをすべて削除してください
ScripAlias /php4/ "C: /php4/"
AddType application/x-httpd-php4 .php

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

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

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

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

人気の記事

ホットツール

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

SublimeText3 中國(guó)語版
中國(guó)語版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

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

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

phpisStillRelevantinModernenterpriseenvironments.1.modernphp(7.xand8.x)は、パフォーマンスゲイン、stricttyping、jit compilation、andmodernsyntaxを提供し、scaleApplications.2.phpintegrateSeffeCtiveTiveliveTiveliveTiveliveTiveTiveTiveliveTiveStures、

n 1クエリの問題を避け、関連するデータを事前にロードすることにより、データベースクエリの數(shù)を減らします。 2.必要なフィールドのみを選択して、メモリと帯域幅を保存するために完全なエンティティをロードしないようにします。 3. DoctrineのセカンダリキャッシュやRedis Cacheの高周波クエリ結(jié)果など、キャッシュ戦略を合理的に使用します。 4.エンティティのライフサイクルを最適化し、クリア()を定期的に呼び出してメモリを解放してメモリオーバーフローを防ぎます。 5.データベースインデックスが存在し、生成されたSQLステートメントを分析して、非効率的なクエリを避けます。 6.変更が不要なシナリオで自動(dòng)変更追跡を無効にし、パフォーマンスを改善するためにアレイまたは軽量モードを使用します。 ORMを正しく使用するには、SQLモニタリング、キャッシュ、バッチ処理、適切な最適化を組み合わせて、開発効率を維持しながらアプリケーションのパフォーマンスを確保する必要があります。

柔軟なPHPマイクロサービスを構(gòu)築するには、RabbitMQを使用して非同期通信を?qū)g現(xiàn)する必要があります。 2。信頼性を確保するために、永続的なキュー、永続的なメッセージ、リリース確認(rèn)、手動(dòng)ACKを構(gòu)成します。 3.指數(shù)バックオフ再試行、TTL、およびデッドレターキューセキュリティ処理の障害を使用します。 4.監(jiān)督などのツールを使用して、消費(fèi)者プロセスを保護(hù)し、ハートビートメカニズムを有効にしてサービスの健康を確保します。そして最終的に、システムが障害で継続的に動(dòng)作する能力を?qū)g現(xiàn)します。

正しいPHP Basicイメージを使用し、安全で最適化されたDocker環(huán)境を構(gòu)成することが、生産を?qū)g現(xiàn)するための鍵です。 1.攻撃面を減らしてパフォーマンスを向上させるための基本畫像としてPHP:8.3-fpm-alpineを選択します。 2.カスタムPHP.iniを介して危険な機(jī)能を無効にし、エラーディスプレイをオフにし、OpCacheとJITを有効にしてセキュリティとパフォーマンスを強(qiáng)化します。 3. NGINXを逆プロキシとして使用して、機(jī)密ファイルへのアクセスを制限し、PHPリクエストをPHP-FPMに正しく転送します。 4.マルチステージ最適化畫像を使用して開発依存関係を削除し、非ルートユーザーを設(shè)定してコンテナを?qū)g行します。 5. CRONなどの複數(shù)のプロセスを管理するためのオプションの監(jiān)督。 6.展開前に機(jī)密情報(bào)漏れがないことを確認(rèn)します

settings.jsonファイルは、ユーザーレベルまたはワークスペースレベルのパスにあり、VSCODE設(shè)定のカスタマイズに使用されます。 1。ユーザーレベルのパス:WindowsはC:\ users \\ appdata \ roaming \ code \ user \ settings.json、macos is/users //settings.json、linux is /home/.config/code/user/settings.json; 2。Workspace-Level Path:.vscode/settings Project Root Directoryの設(shè)定

PHPのゴミ収集メカニズムは參照カウントに基づいていますが、周期的な円形のゴミコレクターによって円形の參照を処理する必要があります。 1。変數(shù)への參照がない場(chǎng)合、參照カウントはすぐにメモリを解放します。 2.參照參照により、メモリを自動(dòng)的にリリースできなくなり、GCを検出およびクリーニングすることがGCに依存します。 3。GCは、「可能なルート」ZVALがしきい値に到達(dá)するか、GC_COLLECT_CYCLES()を手動(dòng)で呼び出すとトリガーされます。 4.長(zhǎng)期実行PHPアプリケーションは、メモリの漏れを避けるために、gc_status()を監(jiān)視し、gc_collect_cycles()を呼び出す必要があります。 5.ベストプラクティスには、gc_disable()を使用してパフォーマンスキー領(lǐng)域を最適化し、ormのclear()メソッドを介して繰り返しのオブジェクトを最適化する回路參照の回避が含まれます。

BREFにより、PHP開発者は、サーバーを管理せずにスケーラブルで費(fèi)用対効果の高いアプリケーションを構(gòu)築できます。 1.Brefは、最適化されたPHPランタイムレイヤーを提供し、PHP8.3およびその他のバージョンをサポートし、LaravelやSymfonyなどのフレームワークとシームレスに統(tǒng)合することにより、PHPをAwslambdaにもたらします。 2。展開手順には、次のものが含まれます。Composerを使用してBREFのインストール、httpエンドポイントや職人コマンドなどの関數(shù)とイベントを定義するためにserverless.ymlの構(gòu)成。 3. serverlessdeployコマンドを?qū)g行して、展開を完了し、Apigatewayを自動(dòng)的に構(gòu)成し、アクセスURLを生成します。 4。Lambdaの制限については、Brefは解決策を提供します。

readonlypropertiesinphp8.2canonlybeassignedonedonedontheconstructoraturatiddeclaration andcannotBemodifiedifiedifiedifiedifiedifiedifiedifiadtivedabilityattthelanguagelele.2.
