この記事では、特定の参考値を持つ PHP ユーザー ログイン検証モジュールを紹介します。必要な友達はそれを参照してください
ユーザー ログインを実現する
>>>1 ログイン フォームを作成します。
ログインフォームのHTMLコードは次のとおりです:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>User Login</title> <style type="text/css"> <!— .alert {color: red} .textinput {width:160px} .btn {width:80px} table {border: 3px double;background-color:#eeeeee;} --> </style> </head> <body> <form name="frmLogin" method="post" action="login.php" onSubmit="return doCheck();"> <table border="0" cellpadding="8" width="350" align="center"> <tr><td colspan="2" align="center" class="alert"></td></tr> 用户名: <td><input name="username" type="text" id="username" class="textinput" /></td> </tr> <tr><td>密码:</td> <td><input name="pwd" type="password" id="password" class="textinput" /></td> </tr> <tr><td colspan="2" align="center"> <input type="submit" class="btn" value="登录"> <input type="reset" class="btn" value="重置"> </td> </tr> </form> </body> </html>
上記のコードをlogin.phpファイルとして保存し、ブラウザで実行します。
>>>2 ログイン名とパスワードを確認します
ユーザーがログイン フォームにログイン情報を入力すると、データが処理のためにこのページの login.php に送信されます。次に、検証を追加します。 login.php のヘッダー ユーザー名とパスワードが正しいかどうかを示すコード。 login.php コードの変更は次のとおりです:
<br/>
<?php require_once('common.php'); // 引入公共文件,其中实现了SQL注入漏洞检查的代码 $username = trim($_POST['username']); // 取得客户端提交的密码并用md5()函数时行加密转换以便后面的验证 $pwd = md5($_POST['pwd']); // 设置一个错误消息变量,以便判断是否有错误发生 // 以及在客户端显示错误消息。 其初值为空 $errmsg = ''; if (!empty($username)) { // 用户填写了数据才执行数据库操作 //--------------------------------------------------------- // 数据验证, empty()函数判断变量内容是否为空 if (empty($username)) { $errmsg = '数据输入不完整'; } //--------------------------------------------------------- if(empty($errmsg)) { // $errmsg为空说明前面的验证通过 // 调用mysqli的构造函数建立连接,同时选择使用数据库'test' $db = @new mysqli("127.0.0.1", "developer", "123456", "test"); // 检查数据库连接 if (mysqli_connect_errno()) { $errmsg = "数据库连接失败! \n"; } else { // 查询数据库,看用户名及密码是否正确 $sql = "SELECT * FROM t_user WHERE f_username='$username' AND f_password='$pwd'"; $rs = $db->query($sql); // $rs->num_rows判断上面的执行结果是否含有记录,有记录说明登录成功 if ($rs && $rs->num_rows > 0) { // 在实际应用中可以使用前面提到的重定向功能转到主页 $errmsg = "登录成功!"; } else { $errmsg = "用户名或密码不正确,登录失败!"; } // 关闭数据库连接 $db->close(); } } } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>User Login</title> <style type="text/css"> <!-- .alert {color: red} .textinput {width:160px} .btn {width:80px} table {border: 3px double;background-color:#eeeeee;} --> </style> </head> <body> <form name="frmLogin" method="post" action="login.php" onSubmit="return doCheck();"> <table border="0" cellpadding="8" width="350" align="center"> <tr><td colspan="2" align="center" class="alert"><?echo $errmsg;?></td></tr> 用户名: <td><input name="username" type="text" id="username" class="textinput" value="<?echo $username;?>" /></td> </tr> <tr><td>密码:</td> <td><input name="pwd" type="password" id="password" class="textinput" /></td> </tr> <tr><td colspan="2" align="center"> <input type="submit" class="btn" value="登录"> <input type="reset" class="btn" value="重置"> </td> </tr> </form> </body> </html>
太字で示されている部分は新しく追加されたコードで、ほとんどのステートメントは詳細にコメントされています。 HTML フォームに追加されたコードは、サーバー側の処理中に発生する可能性のあるエラーまたはプロンプトを出力するために最初の行のセルに追加されます。また、ユーザー名の入力に value 属性がマークされていることに注意してください。ボックスに、最後に送信されたユーザー名を出力する PHP コードを追加しました。これにより、間違ったパスワードを入力したためにログインできないユーザーは、再試行するときにのみパスワードを入力する必要があります。
login.php を再度実行し、フォームにデータを入力してログインを試行します。
>>>3 ユーザーのログイン情報を更新します
ユーザー情報テーブル t_user では、f_logintimes フィールドはユーザーのログイン時刻を記録するために使用され、f_lasttime フィールドはユーザーの最終ログイン時刻を記録するために使用されます。 f_login フィールドは、ユーザーを記録するために使用されます。最後のログインに使用された IP 情報をデータベースに記録することは、主にユーザーのログイン数とユーザーの地理的分布をカウントするのに便利です。これらのデータは、ユーザーがログインするたびに更新する必要があります。次に、これらのデータを更新するコードを追加します。
login.php ファイルを開き、そのヘッダーの PHP コードを次のように変更します。
<?php ...... if ($rs && $rs->num_rows > 0) { // 在实际应用中可以使用前面提到的重定向功能转到主页 第4 / 6页 $errmsg = "登录成功!"; // 更新用户登录信息 $ip = $_SERVER['REMOTE_ADDR']; // 获取客户端的IP $sql = "UPDATE t_user SET f_logintimes = f_logintimes + 1,"; $sql .= "f_lasttime=now(), f_loginip='$ip' "; $sql .= " WHERE f_username='$username'"; $db->query($sql); } else { $errmsg = "用户名或密码不正确,登录失败!"; } ...... ?>
上記の太字の部分は、コード内で、最初に自動グローバル変数からクライアントの IP アドレスを取得します。 $_SERVER を選択し、SQL ステートメントを作成し、そのステートメントを実行してユーザーのログイン情報を更新します。この SQL ステートメントでの f_lasttime の割り当ては、MySQL の内部関数 now() を呼び出すことによって行われ、MySQL の now() 関数はサーバー上の現在時刻を返すことに注意してください。
>>>4 セッションを使用してユーザー情報を保存します
HTTP プロトコルはステートレスです。サーバーにリクエストを送信し、サーバーからデータを取得するだけで、他には何も知りません。同じ PHP ファイルが 2 回リクエストされたとしても、2 つのリクエストの間に関連性があるとは考えません。
HTTP プロトコルのステートレスな性質により、「現在の訪問者」情報を記録するなど、2 つの異なるリクエスト間で情報を共有することは不可能です。ユーザーのユーザー名とパスワードはログインプロセス中に正しいことが検証されますが、ユーザーが他のページにジャンプすると、ログインページから取得したすべてのユーザー情報が失われます。これはユーザーにとって望ましくないことです。同時に、ユーザーが各ページに入るときに認証のためにユーザー名とパスワードの入力を要求するのは非現実的であり、そのためには異なるページ間で情報を共有できる必要があります。
一般的に、PHP やその他の Web プログラミング言語の場合、Cookie またはセッションを使用してこの問題を解決できます。
Cookie はクライアントに保存される小さなファイルで、ページ間で共有する必要がある情報の一部をこのファイルに保存できます。ただし、Cookie には 3 つの欠点があります。1 つは、サイズが 4KB を超えることができないこと (ブラウザによって制限が異なる場合があります)、2 つ目は、ユーザーがブラウザの設定で Cookie を無効にできること、3 つ目は、Cookie がクライアントにデータを記録するため、安全性が低いことです。セッションは通常、Cookie を介して実装されます。ユーザーが Cookie を無効にすると、セッションも無効になります。 Cookie とは異なり、Session は Cookie を通じてクライアントに情報の識別情報を与えるだけですが、実際の情報はサーバーに保存されるため、セキュリティ パフォーマンスが大幅に向上します。現在、Cookie を使用せずにセッションを使用する別の方法、それが URL 書き換え技術です。このメソッドは、サービスと対話するための URL のパラメーターとしてセッション識別子を使用します。利点は、クライアントの Cookie の無効化によって制限されないことですが、欠点は、使用するのがより面倒であることです。
PHP でセッションを使用するのは非常に簡単です。 PHP は、セッションを処理するための自動グローバル変数 $_SESSION を提供します。ただし、PHP 設定ファイルにセッションを自動的に開始する設定がない場合は、セッションを使用する前に session_start() 関数を呼び出してセッションを開始する必要があることに注意してください。
login.php を再度開き、次の太字のコードを追加してユーザー情報を記録します。
<?php ...... if ($rs && $rs->num_rows > 0) { // 使用session保存当前用户 session_start(); $_SESSION['uid'] = $username; // 在实际应用中可以使用前面提到的重定向功能转到主页 $errmsg = "登录成功!"; // 更新用户登录信息 $ip = $_SERVER['REMOTE_ADDR']; // 获取客户端的IP $sql = "UPDATE t_user SET f_logintimes = f_logintimes + 1,"; $sql .= "f_lasttime=now(), f_loginip='$ip' "; $sql .= " WHERE f_username='$username'"; $db->query($sql); } ...... ?>
セッションを乱用しないでください。セッションの最大の役割は、ページ間の状態を維持することです。多くの初心者がセッション テクノロジを習得すると、データを保存するための魔法の武器としてセッションを使用し、大量のデータをセッションに配置することが簡単になります。このデータはセッションが終了するまで公開されないため、サーバーに大きな負担がかかります。
ユーザーがログインしたかどうかを判断する
前のセクションでユーザー名をセッションに保存する作業が完了したため、ユーザーがログインしたかどうかを判断するのは非常に簡単です。コードは次のとおりです:
<?php session_start(); if (empty($_SESSION['uid'])) { echo "您还没有登录,不能访问当前页面!"; exit; } ?>
通过判断自动全局变$_SESSION中的uid是否为空,就可以判断用户是否已经登录。如果用户没有登录,就提示其无法访问当前页面,并终止程序的运行(或者使用一条重定向语句将页面导向登录页)。
相关推荐:
以上がPHPユーザーログイン検証モジュールの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

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

ホットトピック









