Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menentukan kegagalan log masuk dalam php

Bagaimana untuk menentukan kegagalan log masuk dalam php

WBOY
WBOYasal
2023-05-06 13:55:07604semak imbas

Sebagai bahasa skrip, PHP memainkan peranan penting dalam pembangunan banyak aplikasi tapak web. Dalam banyak aplikasi, sistem log masuk juga merupakan bahagian yang hampir tidak boleh diketepikan. Sama ada ia adalah pusat beli-belah, laman rangkaian sosial atau laman web komuniti, log masuk pengguna adalah salah satu proses penting. Oleh itu, apabila membangunkan aplikasi sedemikian, adalah penting untuk menentukan sama ada log masuk berjaya atau gagal Ini adalah syarat utama untuk melindungi maklumat pengguna dan keselamatan aplikasi.

Apabila pengguna memasukkan nama pengguna dan kata laluan mereka, bagaimana untuk menentukan sama ada log masuk pengguna berjaya atau gagal? Di bawah ini saya akan menjawab soalan ini dari perspektif program php.

  1. Pengesahan Borang

Apabila pengguna menyerahkan borang, kami terlebih dahulu perlu mengesahkan data yang diserahkan oleh pengguna untuk memastikan ketepatan input borang. Berikut ialah langkah pertama kami dalam menentukan sama ada pengguna gagal log masuk. Kami boleh melaksanakan pengesahan borang dengan menulis kod PHP yang sepadan, seperti kod berikut:

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

Melalui kod di atas, kami boleh menentukan sama ada pengguna telah memasukkan nama pengguna dan kata laluan. Jika pengguna tidak memasukkan salah satu item, mesej ralat yang sepadan akan digesa. Walau bagaimanapun, hanya menentukan sama ada pengguna telah memasukkan nama pengguna dan kata laluan tidak mencukupi untuk menentukan sama ada log masuk pengguna berjaya.

  1. Pengesahan pangkalan data

Apabila pengguna menyerahkan borang, kami juga perlu mengesahkan di latar belakang sama ada nama pengguna dan kata laluan pengguna adalah betul. Ini perlu disahkan dengan menghubungi jadual pengguna dalam pangkalan data Di sini kami menganggap bahawa nama pengguna dan kata laluan masing-masing disimpan dalam medan username dan password.

Selepas mewujudkan sambungan pangkalan data dengan pangkalan data mysql, kita boleh mengeluarkan nama pengguna dan kata laluan yang wujud dalam pangkalan data melalui kod berikut:

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

Kemudian bandingkan dengan nama pengguna dan kata laluan yang dimasukkan oleh pengguna, jika nama pengguna dan kata laluan Jika betul, kami menganggap log masuk pengguna berjaya sebaliknya, jika nama pengguna dan kata laluan salah, kami menganggap log masuk pengguna gagal.

if($row && $row['password']==$password){
    echo "登录成功";
}else{
    echo "登录失败";
}
  1. Tambah sekatan log masuk

Selepas menentukan sama ada log masuk pengguna berjaya, kami juga mesti mempertimbangkan situasi di mana sesetengah pengguna log masuk secara berniat jahat. Sebagai contoh, jika pengguna menggunakan alat letupan untuk membuat sejumlah besar percubaan log masuk tidak sah, ini boleh menyebabkan beban yang berlebihan pada pelayan. Oleh itu, kita juga harus menambah sekatan log masuk semasa proses log masuk untuk mengawal bilangan percubaan log masuk yang tidak sah.

Untuk mencapai matlamat ini, kita boleh menetapkan pembolehubah pembilang dalam program, dan setiap kali terdapat percubaan log masuk berniat jahat, pembilang akan dinaikkan. Apabila kaunter mencapai nilai yang ditetapkan, anda boleh menetapkan beberapa langkah sekatan, seperti melarang sementara pengguna melog masuk untuk satu tempoh masa.

//设定最多尝试登录次数
$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'];
}

Kod di atas ialah fail log masuk.php yang sangat ringkas, yang melengkapkan pelaksanaan pembilang kegagalan log masuk sehingga tiga kali. Setiap percubaan log masuk yang gagal akan menambah satu kaunter Apabila kaunter mencapai nilai maksimum, IP ini akan dihadkan daripada cuba log masuk untuk tempoh masa. Apabila kata laluan sepadan dengan kata laluan dalam pangkalan data, sesi pengguna berjaya dibuat untuk kegunaan kemudian.

Ringkasnya, tidak kira apa aplikasi itu, ketepatan dan keselamatan pengesahan sistem log masuk pengguna sentiasa menjadi salah satu isu utama dalam pembangunan aplikasi. Hanya melalui pelbagai langkah perlindungan seperti pengesahan borang, pengesahan pangkalan data dan sekatan log masuk, kami boleh menentukan situasi kegagalan log masuk pengguna dengan lebih komprehensif dan berkesan.

Atas ialah kandungan terperinci Bagaimana untuk menentukan kegagalan log masuk dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn