ホームページ >バックエンド開発 >PHPの問題 >PHPでログイン失敗を判断する方法

PHPでログイン失敗を判断する方法

WBOY
WBOYオリジナル
2023-05-06 13:55:07650ブラウズ

スクリプト言語として、php は多くの Web サイト アプリケーションの開発において重要な役割を果たします。多くのアプリケーションでは、ログイン システムもほぼ不可欠な部分です。ショッピング モール、ソーシャル ネットワーキング サイト、コミュニティ Web サイトのいずれであっても、ユーザーのログインは不可欠なプロセスの 1 つです。したがって、このようなアプリケーションを開発する場合、ログインの成功または失敗を判断することが重要であり、これはユーザー情報とアプリケーションのセキュリティを保護するための主要な条件です。

ユーザーがユーザー名とパスワードを入力したとき、ユーザーのログインが成功したか失敗したかを判断するにはどうすればよいでしょうか?以下では、php プログラムの観点からこの質問に答えます。

  1. フォーム検証

ユーザーがフォームを送信するとき、まずユーザーが送信したデータを検証して、フォーム入力の正確性を確認する必要があります。これは、ユーザーがログインに失敗したかどうかを判断するための最初のステップです。次のコードのような対応する PHP コードを記述することで、フォーム検証を実装できます。

if($_POST['username'] == ''){
    echo "请输入用户名";
}elseif($_POST['password'] == ''){
    echo "请输入密码";
}else{
    //验证表单通过
}

上記のコードを通じて、ユーザーがユーザー名とパスワードを入力したかどうかを判断できます。ユーザーがいずれかの項目を入力しないと、対応するエラー メッセージが表示されます。ただし、ユーザーがユーザー名とパスワードを入力したかどうかを判断するだけでは、ユーザーのログインが成功したかどうかを判断するのに十分ではありません。

  1. データベース検証

ユーザーがフォームを送信した後、ユーザーのユーザー名とパスワードが正しいかどうかをバックグラウンドで検証する必要もあります。これは、検証のためにデータベースのユーザー テーブルにリンクする必要があります。ここでは、ユーザー名とパスワードがそれぞれユーザー テーブルの username フィールドと password フィールドに格納されていると仮定します。

mysql データベースとのデータベース接続を確立した後、次のコードを使用してデータベースに存在するユーザー名とパスワードを取得できます:

$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM 用户表格 WHERE username='$username'";
$result = mysqli_query($conn,$sql);
$row = mysqli_fetch_assoc($result);

次に、それを、によって入力されたユーザー名とパスワードと比較します。ユーザー名とパスワードが正しければ、ユーザーのログインは成功したとみなされます。そうでない場合は、ユーザー名とパスワードが間違っていれば、ユーザーのログインは失敗したとみなされます。

if($row && $row['password']==$password){
    echo "登录成功";
}else{
    echo "登录失败";
}
  1. ログイン制限を追加する

ユーザーのログインが成功したかどうかを判断した後、一部のユーザーが悪意を持ってログインする状況も考慮する必要があります。たとえば、ユーザーがブラスト ツールを使用して無効なログイン試行を多数行った場合、サーバーに過度の負荷がかかる可能性があります。したがって、ログインプロセス中にログイン制限を追加して、無効なログイン試行の回数を制御する必要もあります。

これを実現するには、プログラム内にカウンタ変数を設定します。悪意のあるログイン試行があるたびに、カウンタがインクリメントされます。カウンタが設定値に達した場合、一時的に一定期間ログインを禁止するなどの制限を設定できます。

//设定最多尝试登录次数
$max_login_times = 3;
$login_failed = false;
//获取用户输入的用户名和密码
$username = $_POST['username'];
$password = $_POST['password'];
//从数据库中获取用户名对应的密码
$sql = "SELECT * FROM `user` WHERE username='$username'";
$result = mysqli_query($conn,$sql);
$row = mysqli_fetch_assoc($result);

//如果用户输入的密码与数据库中密码不一致,或者数据库中没有该用户名
if(!$row || $row['password']!=$password){
    $login_failed = true; //登录失败
    //每次登录失败,则计数器增加一
    $count = isset($_SESSION['login_count'])?$_SESSION['login_count']:0;
    $_SESSION['login_count'] = ++$count;

    if($count>=$max_login_times){
        //登录失败次数过多,锁定用户一段时间
        $lock_time = 60*60;
        $_SESSION['lock_time'] = time()+$lock_time; //锁定时间为一小时
    }

}else{
    session_start();
    //用户登录成功
    $_SESSION['user_id']=$row['id'];
    $_SESSION['user_name']=$row['username'];
}

上記のコードは非常に単純化されたlogin.phpファイルで、これにより最大3回のログイン失敗カウンターの実装が完了します。ログイン試行が失敗するたびにカウンタが 1 ずつ増加し、カウンタが最大値に達すると、この IP は一定期間ログイン試行が制限されます。パスワードがデータベース内のパスワードと一致すると、後で使用できるようにユーザー セッションが正常に作成されます。

つまり、どのようなアプリケーションであっても、ユーザー ログイン システム検証の正確性とセキュリティは常にアプリケーション開発における重要な問題の 1 つです。フォーム検証、データベース検証、ログイン制限などの複数の保護手段を通じてのみ、ユーザーのログイン失敗の状況をより包括的かつ効果的に判断できます。

以上がPHPでログイン失敗を判断する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。