آموزش ساخت سیستم ورود

آموزش ساخت سیستم ورود با PHP

آموزش ساخت سیستم ورود با PHP

سیستم ورود یکی از اجزای اساسی هر وب‌سایت یا برنامه‌ی تحت وب است که نیاز به احراز هویت کاربران دارد. این مقاله به شما آموزش می‌دهد که چگونه یک سیستم ورود ساده و امن با استفاده از PHP و MySQL ایجاد کنید. این آموزش شامل مراحل طراحی پایگاه داده، ایجاد فرم ورود، پردازش اطلاعات ورود، و مدیریت جلسات کاربری (sessions) خواهد بود.

۱. طراحی پایگاه داده

برای ذخیره اطلاعات کاربران، به یک پایگاه داده نیاز داریم. در اینجا از MySQL استفاده می‌کنیم. یک جدول به نام ‘users’ ایجاد کنید که شامل فیلدهای زیر باشد:

  • id: کلید اصلی (Primary Key)، عدد صحیح، خودکار افزایش (Auto Increment)
  • username: نام کاربری، رشته متنی (VARCHAR)
  • password: رمز عبور، رشته متنی (VARCHAR)
  • email: ایمیل، رشته متنی (VARCHAR)

ساختار جدول به صورت زیر خواهد بود:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(100) NOT NULL
);

نکته مهم: رمز عبورها را به صورت مستقیم در پایگاه داده ذخیره نکنید. همیشه از توابع هش (Hashing) مانند password_hash() برای رمزنگاری رمز عبورها استفاده کنید.

۲. ایجاد فرم ورود (Login Form)

فرم ورود شامل دو فیلد برای نام کاربری و رمز عبور است. این فرم را می‌توان با استفاده از HTML ایجاد کرد. فایل ‘login.php’ را ایجاد کنید و کد زیر را در آن قرار دهید:

<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>فرم ورود</title>
</head>
<body>
    <h2>فرم ورود</h2>
    <form action="login_process.php" method="post">
        <label for="username">نام کاربری:</label>
        <input type="text" id="username" name="username" required><br>

        <label for="password">رمز عبور:</label>
        <input type="password" id="password" name="password" required><br>

        <button type="submit">ورود</button>
    </form>
</body>
</html>

۳. پردازش اطلاعات ورود (Login Process)

فایل ‘login_process.php’ مسئول دریافت اطلاعات ارسالی از فرم ورود، اعتبارسنجی آن‌ها، و ایجاد جلسه کاربری است. کد زیر را در این فایل قرار دهید:

<?php
session_start();

// اتصال به پایگاه داده
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "your_database_name";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// دریافت اطلاعات از فرم
$username = $_POST['username'];
$password = $_POST['password'];

// جستجوی کاربر در پایگاه داده
$sql = "SELECT id, username, password FROM users WHERE username = '$username'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // دریافت اطلاعات کاربر
    $row = $result->fetch_assoc();
    $hashed_password = $row['password'];

    // بررسی رمز عبور
    if (password_verify($password, $hashed_password)) {
        // ایجاد جلسه کاربری
        $_SESSION['user_id'] = $row['id'];
        $_SESSION['username'] = $row['username'];

        // هدایت به صفحه اصلی
        header("Location: index.php");
        exit();
    } else {
        // رمز عبور اشتباه است
        echo "رمز عبور اشتباه است.";
    }
} else {
    // کاربر یافت نشد
    echo "کاربر یافت نشد.";
}

$conn->close();
?>

توضیحات:

  • session_start(): جلسه کاربری را آغاز می‌کند.
  • $conn = new mysqli(...): اتصال به پایگاه داده را برقرار می‌کند.
  • $_POST['username'] و $_POST['password']: اطلاعات ارسالی از فرم را دریافت می‌کنند.
  • $sql = "SELECT ... WHERE username = '$username'": یک پرس و جو SQL برای جستجوی کاربر با نام کاربری مشخص ایجاد می‌کند.
  • password_verify($password, $hashed_password): رمز عبور وارد شده توسط کاربر را با رمز عبور هش شده ذخیره شده در پایگاه داده مقایسه می‌کند.
  • $_SESSION['user_id'] = $row['id'] و $_SESSION['username'] = $row['username']: اطلاعات کاربر را در متغیرهای جلسه ذخیره می‌کنند.
  • header("Location: index.php"): کاربر را به صفحه اصلی هدایت می‌کند.

۴. مدیریت جلسات کاربری (Session Management)

جلسات کاربری به شما امکان می‌دهند اطلاعات کاربر را در طول چندین درخواست (request) ذخیره کنید. برای مدیریت جلسات کاربری، می‌توانید از متغیرهای $_SESSION استفاده کنید.

بررسی وضعیت ورود:

برای بررسی اینکه آیا کاربر وارد شده است یا خیر، می‌توانید از کد زیر استفاده کنید:

<?php
session_start();

if (isset($_SESSION['user_id'])) {
    // کاربر وارد شده است
    echo "سلام " . $_SESSION['username'] . "! شما وارد شده‌اید.";
} else {
    // کاربر وارد نشده است
    echo "شما وارد نشده‌اید.";
}
?>

خروج از سیستم:

برای خروج از سیستم، می‌توانید از کد زیر استفاده کنید:

<?php
session_start();

// حذف اطلاعات کاربر از جلسه
session_unset();
session_destroy();

// هدایت به صفحه ورود
header("Location: login.php");
exit();
?>

۵. ثبت نام کاربر (User Registration)

برای تکمیل سیستم ورود، باید امکان ثبت نام کاربر را نیز فراهم کنید. فایل ‘register.php’ را ایجاد کنید و کد زیر را در آن قرار دهید:

<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>فرم ثبت نام</title>
</head>
<body>
    <h2>فرم ثبت نام</h2>
    <form action="register_process.php" method="post">
        <label for="username">نام کاربری:</label>
        <input type="text" id="username" name="username" required><br>

        <label for="password">رمز عبور:</label>
        <input type="password" id="password" name="password" required><br>

        <label for="email">ایمیل:</label>
        <input type="email" id="email" name="email" required><br>

        <button type="submit">ثبت نام</button>
    </form>
</body>
</html>

فایل ‘register_process.php’ را ایجاد کنید و کد زیر را در آن قرار دهید:

<?php
// اتصال به پایگاه داده
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "your_database_name";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// دریافت اطلاعات از فرم
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];

// هش کردن رمز عبور
$hashed_password = password_hash($password, PASSWORD_DEFAULT);

// درج اطلاعات کاربر در پایگاه داده
$sql = "INSERT INTO users (username, password, email) VALUES ('$username', '$hashed_password', '$email')";

if ($conn->query($sql) === TRUE) {
    echo "ثبت نام با موفقیت انجام شد.";
    header("Location: login.php");
    exit();
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>

۶. نکات امنیتی

امنیت سیستم ورود بسیار مهم است. در اینجا چند نکته امنیتی را ذکر می‌کنیم:

  • رمزنگاری رمز عبور: همیشه از توابع هش (Hashing) مانند password_hash() برای رمزنگاری رمز عبورها استفاده کنید.
  • جلوگیری از SQL Injection: از Prepared Statements برای جلوگیری از حملات SQL Injection استفاده کنید.
  • اعتبارسنجی ورودی: اطلاعات ورودی را اعتبارسنجی کنید تا از ورود داده‌های نامعتبر جلوگیری کنید.
  • استفاده از HTTPS: از پروتکل HTTPS برای رمزنگاری ارتباط بین کاربر و سرور استفاده کنید.
  • محدود کردن تلاش‌های ورود: تعداد تلاش‌های ورود ناموفق را محدود کنید تا از حملات Brute Force جلوگیری کنید.

این آموزش یک سیستم ورود ساده را با استفاده از PHP و MySQL ایجاد کرد. با رعایت نکات امنیتی، می‌توانید یک سیستم ورود امن و قابل اعتماد برای وب‌سایت یا برنامه تحت وب خود ایجاد کنید.