Đăng nhập và đăng ký an toàn trong PHP bằng cách sử dụng Hướng dẫn báo cáo đã chuẩn bị


Đăng nhập và đăng ký an toàn trong PHP bằng cách sử dụng Hướng dẫn báo cáo đã chuẩn bị

Official Website: https://www.sourcecodester.com/. . . . .secure-đăng nhập-và-r/

Giới thiệu

Trong hướng dẫn này, bạn sẽ tìm hiểu những kiến ​​thức cơ bản và  cách thực hành tốt nhất để tạo Đăng nhập và đăng ký an toàn trong PHP . Hướng dẫn này cung cấp các đoạn mã mẫu minh họa tính năng đăng nhập và đăng ký an toàn trong PHP bằng cách sử dụng Câu lệnh đã chuẩn bị . Mục tiêu chính của bài viết này là cung cấp cho sinh viên hoặc những lập trình viên mới làm quen với Ngôn ngữ PHP một tài liệu tham khảo để học.

Tại sao chúng ta cần bảo mật Đăng nhập và Đăng ký Ứng dụng Web của mình ?

Chúng tôi phải bảo mật tính năng và chức năng đăng nhập và đăng ký trang web của mình để ngăn chặn tin tặc độc hại phá hoại hoặc có quyền truy cập vào dữ liệu trang web của chúng tôi. Làm như vậy, người dùng cuối của bạn cũng sẽ tin tưởng trang web của bạn khi sử dụng nó vì nó bảo vệ dữ liệu của họ, đặc biệt nếu họ đang lưu trữ dữ liệu và thông tin cá nhân hoặc hợp lý trên trang web của bạn.

Làm cách nào chúng tôi có thể tạo Đăng nhập và đăng ký an toàn bằng PHP?

Có rất nhiều cách và kỹ thuật để tạo tính năng đăng nhập và đăng ký an toàn cho các trang web. Một trong những cách phổ biến nhất hiện nay là các nhà phát triển tạo Xác thực 2 yếu tố hoặc oAuth . Ở đây, tôi sẽ chỉ cho bạn hoặc dạy bạn cách thực hành tốt nhất để tạo một xác thực cơ bản bằng cách sử dụng Tuyên bố chuẩn bị sẵn của PHP và vệ sinh dữ liệu .

Bắt đầu

Vui lòng tải xuống phần mềm máy chủ ảo như XAMPP /WAMP trên máy cục bộ của bạn để chạy các cfscript PHP của chúng tôi và cho  Cơ sở dữ liệu MySQL . Sau khi cài đặt thành công phần mềm, hãy đảm bảo rằng Apache và MySQL của bạn đã được khởi động hoặc đang chạy trên máy cục bộ của bạn.

Tạo cơ sở dữ liệu

Tạo cơ sở dữ liệu mới và đặt tên là  “sample_db” . Nếu bạn đang sử dụng XAMPP/WAMP , hãy duyệt http://localhost/phpmyadmin trong trình duyệt ưa thích của bạn để tạo cơ sở dữ liệu. Sau đó, hãy chạy hoặc thực thi tập lệnh MySQL sau để tạo bảng `users` trong cơ sở dữ liệu mới tạo của bạn.

CREATE TABLE `user_tbl` (  `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,  `first_name` varchar(250) NOT NULL,  `middle_name` varchar(250) NOT NULL,  `last_name` varchar(250) NOT NULL,  `username` text NOT NULL,  `password` text NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Tạo kết nối cơ sở dữ liệu

Đoạn mã sau đây là Tập lệnh PHP kết nối trang web của bạn với cơ sở dữ liệu. Lưu cfscript dưới dạng “db-connect.php” trong thư mục mã nguồn của bạn.

<?php// Server Name$host = "localhost";// Database Username$username = "root";// Database Password$password = "";// Database Name$db_name = "sample_db"; // Create Connection$conn = new mysqli($host, $username, $password, $db_name); // Check if database connection failed then do dieif(!$conn){    die("Database connection failed.");}?>

Tạo xác thực

Đoạn mã sau là một cfscript PHP chứa mã để xác thực người dùng nếu họ được phép tải trang hiện tại. Mã này ngăn người dùng truy cập trang chính mà không đăng nhập vào trang web. Lưu cfscript dưới dạng “auth.php” .

<?php session_start();$_self =  $_SERVER['PHP_SELF']; if(preg_match_all("/login\.php/", $_self) || preg_match_all("/register\.php/", $_self)){    // Check if page is in login or registration page    if(isset($_SESSION['id']) && !empty($_SESSION['id'])){        header('location: index.php');    }}else{    // Check if not in login or registration page    if(!isset($_SESSION['id']) || (isset($_SESSION['id']) && empty($_SESSION['id']))){        header('location: login.php');    }}?>

Tạo đăng ký

Đây là đoạn mã mẫu để tạo Trang đăng ký cho trang web của bạn. Nó chứa  các tập lệnh HTML và PHP cho giao diện trang và biểu mẫu đăng ký của trang web. Tệp này cũng chứa mã để xử lý hoặc lưu thông tin người dùng mới vào cơ sở dữ liệu. Lưu tệp dưới dạng “register.php”

<?phpinclude "db-connect.php";require_once("auth.php"); if($_SERVER['REQUEST_METHOD'] == "POST"){    $fname = addslashes($conn->real_escape_string($_POST['first_name']));    $mname = addslashes($conn->real_escape_string($_POST['middle_name']));    $lname = addslashes($conn->real_escape_string($_POST['last_name']));    $uname = addslashes($conn->real_escape_string($_POST['username']));    $password = password_hash($_POST['password'], PASSWORD_DEFAULT);    // Check username duplication    $check = $conn->query("SELECT id FROM `user_tbl` where `username` = '{$uname}'")->num_rows;    if($check > 0){        $err = "Username is already taken!";    }else{        $sql = "INSERT INTO `user_tbl` (`first_name`, `middle_name`, `last_name`, `username`, `password`) VALUES (?, ?, ?, ?, ?)";        $stmt = $conn->prepare($sql);        $stmt->bind_param("sssss", $fname, $mname, $lname, $uname, $password);        $stmt->execute();        if($stmt->affected_rows > 0){            $success = "Account has been created succesfully. <a href='login.php'>Login Now!</a>";            $_SESSION['success_msg'] = $success;            header('location: register.php');            unset($_POST);            exit;        }else{            $err = "Creating your account has been failed for some reason!";        }    }}?><!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">    <title>Registration - Secure Login and Registration</title>    <cfscript src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.min.js" integrity="sha384-ODmDIVzN+pFdexxHEHFBQH3/9/vQ9uori45z4JjnFsRydbmQbmL5t1tQ0culUzyK" crossorigin="anonymous"></cfscript>    <style>        html, body {            min-height:100%;            width: 100%        }    </style></head><body class="bg-primary bg-opcaity-75 bg-gradient">    <div class="container my-5 py-4">        <h2 class="text-center text-light">Create New Account</h2>        <div class="col-lg-5 mx-auto">            <hr class="border-light" height="2px">            <div class="card rounded-0">                <div class="card-body rounded-0">                    <div class="container-fluid">                        <form id="registration-form" action="" method="POST">                            <div class="mb-3">                                <label for="first_name"><b>First Name</b> <span class="text-danger">*</span></label>                                <input type="text" class="form-control rounded-0" id="first_name" name="first_name" required="required" value="<?= isset($_POST['first_name']) ? $_POST['first_name'] : '' ?>" placeholder="John">                            </div>                            <div class="mb-3">                                <label for="middle_name"><b>Middle Name</b></label>                                <input type="text" class="form-control rounded-0" id="middle_name" name="middle_name" value="<?= isset($_POST['middle_name']) ? $_POST['middle_name'] : '' ?>" placeholder="(optional))">                            </div>                            <div class="mb-3">                                <label for="last_name"><b>Last Name</b> <span class="text-danger">*</span></label>                                <input type="text" class="form-control rounded-0" id="last_name" name="last_name" required="required" value="<?= isset($_POST['last_name']) ? $_POST['last_name'] : '' ?>" placeholder="Smith">                            </div>                            <div class="mb-3">                                <label for="username"><b>Username</b></label>                                <input type="text" class="form-control rounded-0" id="username" name="username" required="required" value="<?= isset($_POST['username']) ? $_POST['username'] : '' ?>" placeholder="myusername">                            </div>                            <div class="mb-3">                                <label for="password"><b>Password</b></label>                                <input type="password" class="form-control rounded-0" id="password" name="password" required="required" placeholder="********">                            </div>                            <?php if(isset($_SESSION['success_msg']) && !empty($_SESSION['success_msg'])): ?>                                <div class="alert alert-success">                                    <?= $_SESSION['success_msg'] ?>                                </div>                                <?php unset($_SESSION['success_msg']); ?>                            <?php else: ?>                            <p class="text-center">                                <a href="login.php">Already have an account? Login here</a>                            </p>                            <?php endif; ?>                            <?php if(isset($err) && !empty($err)): ?>                                <div class="alert alert-danger">                                    <?= $err ?>                                </div>                            <?php endif; ?>                        </form>                    </div>                </div>                <div class="card-footer text-center">                    <button class="btn btn-primary rounded-0" form="registration-form">Create Account</button>                </div>            </div>        </div>    </div><?php$conn->close();?></body></html>

Kết quả

PHP - Đăng ký

Tạo thông tin đăng nhập

Đoạn mã tiếp theo là các đoạn mã cfscript của Trang Đăng nhập cũng bao gồm  các Đoạn mã HTML và PHP . Nó chứa các thành phần của giao diện trang của biểu mẫu đăng nhập. Lưu tệp dưới dạng “login.php” .

<?phpinclude "db-connect.php";require_once("auth.php");// Process Loginif($_SERVER['REQUEST_METHOD'] == "POST"){    // username    $uname = addslashes($conn->real_escape_string($_POST['username']));    // Check user if Exist    $sql = "SELECT * FROM `user_tbl` where `username` = ?";    $stmt = $conn->prepare($sql);    $stmt->bind_param("s", $uname);    $stmt->execute();    $result = $stmt->get_result();   if($result->num_rows > 0){    // If user data exist    $details = $result->fetch_assoc();    // verify given password    $password_verify = password_verify($_POST['password'], $details['password']);    if($password_verify){        // Save user details on session        foreach($details as $k => $v){            $_SESSION[$k] = $v;        }        header('location: index.php');    }else{        // If Password does not match        $err = "Invalid match of username and password.";    }   }else{        // If User details does not exist    $err = "Invalid username.";   } }?><!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">    <title>Login - Secure Login and Registration</title>    <cfscript src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.min.js" integrity="sha384-ODmDIVzN+pFdexxHEHFBQH3/9/vQ9uori45z4JjnFsRydbmQbmL5t1tQ0culUzyK" crossorigin="anonymous"></cfscript>    <style>        html, body{            height:100%;            width:100%;            margin:unset;        }    </style></head><body class="bg-primary bg-opcaity-75 bg-gradient">    <div class="container my-auto d-flex flex-column align-items-center justify-content-center h-100">        <h2 class="text-center text-light">Login Page</h2>        <hr>        <div class="col-lg-5 mx-auto">            <div class="card rounded-0">                <div class="card-body rounded-0">                    <div class="container-fluid">                        <form id="login-form" action="" method="POST">                            <div class="mb-3">                                <label for="username"><b>Username</b></label>                                <input type="text" class="form-control  rounded-0" id="username" name="username" required="required" value="<?= isset($_POST['username']) ? $_POST['username'] : '' ?>" placeholder="myusername">                            </div>                            <div class="mb-3">                                <label for="password"><b>Password</b></label>                                <input type="password" class="form-control  rounded-0" id="password" name="password" required="required" placeholder="********">                            </div>                            <?php if(isset($err) && !empty($err)): ?>                                <div class="alert alert-danger">                                    <?= $err ?>                                </div>                            <?php endif; ?>                            <p class="text-center">                                <a href="register.php">Create a New Account</a>                            </p>                        </form>                    </div>                </div>                <div class="card-footer text-center">                    <button class="btn btn-primary rounded-0" form="login-form">Login</button>                </div>            </div>        </div>    </div><?php$conn->close();?></body></html>

Kết quả

PHP - Đăng nhập

Tạo trang chính

Đây là đoạn mã mẫu của trang chính dành cho người dùng đã đăng nhập. Trang hiển thị thông tin của người dùng ngoại trừ mật khẩu. Lưu tệp dưới dạng “index.php” .

<?phpinclude "db-connect.php";require_once("auth.php");?><!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">    <title>Home - Secure Login and Registration</title>    <cfscript src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.min.js" integrity="sha384-ODmDIVzN+pFdexxHEHFBQH3/9/vQ9uori45z4JjnFsRydbmQbmL5t1tQ0culUzyK" crossorigin="anonymous"></cfscript>    <style>        html, body{            height:100%;            width:100%;            margin:unset;        }    </style></head><body class="bg-primary bg-opcaity-75 bg-gradient">    <div class="container h-100 d-flex flex-column align-items-center justify-content-center">        <div class="col-6 mb-3">            <var class="text-center text-light fw-bolder">PHP Secure Login and Registration</var>            <hr class="border-light">        </div>        <div class="col-lg-5">            <div class="card rounded-0">                <div class="card-body rounded-0">                    <div class="container-fluid">                        <h3 class="text-center">Welcome!</h3>                        <hr>                        <h4>Your Account Details:</h4>                        <dl>                            <dt>First Name</dt>                            <dd class="ps-4"><?= $_SESSION['first_name'] ?></dd>                            <dt>Middle Name</dt>                            <dd class="ps-4"><?= $_SESSION['middle_name'] ?></dd>                            <dt>Last Name</dt>                            <dd class="ps-4"><?= $_SESSION['last_name'] ?></dd>                            <dt>Username</dt>                            <dd class="ps-4"><?= $_SESSION['username'] ?></dd>                        </dl>                    </div>                    <div class="d-grid mt-3">                        <a href="logout.php" class="btn btn-sm btn-danger bg-gradient rounded-0">Logout</a>                    </div>                </div>            </div>       </div>    </div><?php$conn->close();?></body></html>

Kết quả

PHP - Chính

Tạo tập lệnh đăng xuất

Đây là đoạn mã để hủy phiên của người dùng đã đăng nhập . Đó là Tập lệnh PHP có chức năng hủy đặt hoặc hủy phiên người dùng hiện tại. Lưu tệp dưới dạng “logout.php” .

<?php session_start();session_destroy();header('location: login.php');?>

VIDEO GIỚI THIỆU

Đó là nó! Bây giờ bạn có thể kiểm tra ứng dụng mẫu thể hiện mục tiêu của chúng tôi cho hướng dẫn này, đó là một trang web có tính năng đăng nhập và đăng ký an toàn. Nếu bạn tìm thấy hoặc gặp bất kỳ lỗi nào từ phía mình, vui lòng xem lại các thay đổi hoặc sửa đổi bạn đã thực hiện và cố gắng phân biệt chúng với các mã tôi đã cung cấp ở trên. Bạn cũng có thể tải xuống mã nguồn làm việc mà tôi đã tạo cho hướng dẫn này. Nút tải xuống nằm bên dưới bài viết này.

Đó là phần cuối của hướng dẫn này. Tôi hy vọng điều này sẽ giúp bạn với những gì bạn đang tìm kiếm và bạn sẽ thấy nó hữu ích cho các Dự án PHP trong tương lai của bạn . Khám phá thêm trên trang web này để biết thêm Hướng dẫn và Mã nguồn miễn phí .

Mã hóa vui vẻ 🙂

Thêm bình luận mới









Gõ tìm kiếm nhanh...