Cara Membuat PHP Login Session, Lengkap dengan Contoh Script

Setiap aplikasi web yang memiliki fitur login wajib mengamankan akses penggunanya. Tanpa prosedur autentikasi yang tepat, sistem mungkin rentan terhadap akses yang tidak sah.

Nah, untuk menangani proses ini, Anda bisa membuat session login PHP. Sesi ini memastikan bahwa hanya pengguna terverifikasi yang bisa mengakses halaman tertentu di website Anda. Selain itu, pengguna juga tidak perlu login berulang kali.

Di artikel ini, kami akan menjelaskan langkah-langkah membuat PHP login session yang bisa Anda ikuti dengan mudah. Yuk, langsung saja simak panduan lengkapnya di bawah ini!

Cara Membuat PHP Session Login dan Logout

Untuk tutorial ini, kami akan membuat session login dan logout menggunakan website yang sudah online. Anda tetap bisa mengikutinya untuk website yang masih berada di komputer lokal, asalkan sudah menginstal aplikasi web server seperti XAMPP.

Langsung saja, ini langkah-langkah selengkapnya:

1. Buat Database Baru di Hosting

Anda perlu membuat database baru di akun hosting Anda. Kami akan menunjukkan caranya menggunakan hPanel, tapi seharusnya tidak jauh berbeda dengan control panel hosting lainnya.

  1. Login ke hPanel, lalu pilih menu Website.
  2. Klik Dashboard pada website yang Anda maksud.
tampilan menu website di hpanel dengan tombol dashboard yang dipilih
  1. Akses menu DatabasePengelolaan.
  2. Masukkan nama database, username, dan password, lalu klik Buat. Catat kredensial ini karena akan Anda butuhkan lagi nanti.
  3. Setelah siap, pilih Masuk phpMyAdmin di samping database tersebut.
tampilan menu database hpanel dengan opsi masuk phpmyadmin yang dipilih

Anda kemudian akan diarahkan ke halaman phpMyAdmin. Pada toolbar bagian atas, pilih SQL seperti di bawah ini.

tampilan phpmyadmin dengan tab sql yang dipilih

Di halaman SQL, masukkan skrip berikut ini pada kolom yang tersedia:

CREATE TABLE `users` (
  id int(11) NOT NULL AUTO_INCREMENT,
  username varchar(255) NOT NULL,
  email varchar(255) NOT NULL,
  password varchar(64) NOT NULL,
  PRIMARY KEY(id)
);
INSERT INTO `users` (`username`, `email`, `password`) VALUES ('admin', 'admin@email.com', SHA2('password', 256));

Pilih Go setelah selesai memasukkan skrip, dan sekarang database Anda sudah memiliki tabel users yang berisi username, email, dan password dengan nilai default dari skrip kami.

tampilan phpmyadmin menunjukkan tabel users yang baru dibuat

2. Siapkan Struktur Project PHP

Berikutnya, Anda perlu menyiapkan struktur project PHP. Kembali ke bagian Dashboard pada website Anda di hPanel, kemudian pilih File Manager.

tampilan menu file manager hostinger di halaman dashboard hpanel

Di File Manager, akses direktori root Anda yang biasanya bernama public_html. Klik dua kali folder tersebut untuk membukanya.

folder public_html di file manager hostinger

Buat folder baru dengan mengakses menu Folder baru di sidebar kiri. Nantinya, folder ini akan digunakan untuk menyimpan file aset gambar.

Beri nama sesuai preferensi Anda, tapi pastikan tetap jelas dan singkat agar mudah diakses. Dalam panduan ini, kami memberi nama folder tersebut Images.

Setelah itu, buat lima file baru dengan ekstensi PHP di folder public_html. Sebagai contoh, kami membuat lima file berikut:

  • berhasil_login.php
  • config.php
  • index.php
  • logout.php
  • register.php
  • style.css
tampilan file manager hostinger menunjukkan file php yang baru dibuat

Apabila semua folder dan filenya sudah siap, Anda bisa lanjut ke langkah berikutnya untuk menghubungkan PHP dengan MySQL.

3. Hubungkan PHP dengan MySQL

Pada langkah ini, Anda perlu menghubungkan PHP dengan MySQL menggunakan salah satu file yang tadi sudah dibuat, yaitu config.php.

Di file manager, klik kanan file tersebut lalu pilih Edit untuk membuka editor kode.

tampilan file manager hostinger menunjukkan opsi mengedit file config php

Sisipkan skrip berikut ini ke file tersebut:

<?php
$server = "server_database";
$user = "username_database";
$pass = "password_database";
$database = "nama_database";
$conn = mysqli_connect($server, $user, $pass, $database);
if (!$conn) {
    die("Koneksi ke database gagal: " . mysqli_connect_error());
}
?>

Ganti server_database, username_databasepassword_database, dan nama_database dengan kredensial database yang tadi sudah Anda catat. Kalau sudah, klik tombol Simpan di kanan atas untuk menyimpan skrip.

tampilan editor kode hostinger dengan tombol simpan yang dipilih.

4. Mulai Buat Halaman Login

Untuk membuat halaman login, selanjutnya Anda perlu menggunakan file index.php. File ini akan diisi kode untuk membuat halaman login yang mengombinasikan skrip PHP dan HTML.

Kode PHP berfungsi untuk memvalidasi email dan password pengguna. Apabila pengguna salah memasukkan kredensial, sistem akan menampilkan pesan error dan mereka tidak bisa login. Sementara itu, kode HTML diperlukan untuk membuat form login.

Buka file index.php Anda lalu masukkan kode di bawah ini:

<?php
include 'config.php';
session_start();
 
if (isset($_SESSION['username'])) {
    header("Location: berhasil_login.php");
    exit();
}
 
if (isset($_POST['submit'])) {
    $email = mysqli_real_escape_string($conn, $_POST['email']);
    $password = hash('sha256', $_POST['password']); // Hash the input password using SHA-256
 
    $sql = "SELECT * FROM users WHERE email='$email' AND password='$password'";
    $result = mysqli_query($conn, $sql);
 
    if ($result->num_rows > 0) {
        $row = mysqli_fetch_assoc($result);
        $_SESSION['username'] = $row['username'];
        header("Location: berhasil_login.php");
        exit();
    } else {
        echo "<script>alert('Email atau password Anda salah. Silakan coba lagi!')</script>";
    }
}
?>
 
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
    <link rel="stylesheet" type="text/css" href="style.css">
    <title>Tutorial Hostinger</title>
</head>
<body>
    <div class="container">
        <form action="" method="POST" class="login-email">
            <p class="login-text" style="font-size: 2rem; font-weight: 800;">Login</p>
            <div class="input-group">
                <input type="email" placeholder="Email" name="email" required>
            </div>
            <div class="input-group">
                <input type="password" placeholder="Password" name="password" required>
            </div>
            <div class="input-group">
                <button name="submit" class="btn">Login</button>
            </div>
            <p class="login-register-text">Belum punya akun? <a href="register.php">Daftar</a>.</p>
        </form>
    </div>
</body>
</html>

Simpan perubahan Anda, lalu coba buka halaman login tersebut dengan mengakses domain Anda diikuti dengan nama file index.php, misalnya: https://website-1.tld/index.php.

Karena belum diberi gaya, tampilan awal session login PHP kami akan terlihat seperti ini:

tampilan awal halaman login dengan session login php

Agar halaman tersebut terlihat lebih menarik, Anda bisa menambahkan gaya dan gambar dengan mengedit file style.css.

Berikut contoh kode CSS yang bisa Anda gunakan:

@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
 
* {
    margin-bottom: 0;
    padding: 0;
    box-sizing: border-box;
}
 
body {
    width: 100%;
    min-height: 100vh;
    background-image: linear-gradient(rgba(0, 0, 0, .5), rgba(0, 0, 0, .5)), url(images/gambar.jpg);
    background-position: center;
    background-size: cover;
    display: flex;
    justify-content: center;
    align-items: center;
    font-family: 'Poppins', sans-serif;
    color: #111;
}
 
.container {
    width: 400px;
    min-height: 400px;
    background: #FFF;
    border-radius: 5px;
    box-shadow: 0 0 5px rgba(0, 0, 0, .3);
    padding: 40px 30px;
}
 
.container-logout {
    width: 500px;
    min-height: 200px;
    background: #FFF;
    border-radius: 5px;
    box-shadow: 0 0 5px rgba(0, 0, 0, .3);
    padding: 40px 30px;
}
 
h1 {
    font-weight: 500;
    font-size: 1.1rem;
    text-align: center;
    margin-bottom: 20px;
    display: block;
    text-transform: capitalize;
}
 
.input-group {
    width: 100%;
    margin-bottom: 25px;
}
 
.input-group input {
    width: 100%;
    height: 50px;
    border: 2px solid #e7e7e7;
    padding: 15px 20px;
    font-size: 1rem;
    border-radius: 30px;
    background: transparent;
    outline: none;
    transition: .3s;
}
 
.input-group input:focus, .input-group input:valid {
    border-color: #a29bfe;
}
 
.input-group .btn {
    display: block;
    width: 100%;
    padding: 15px 20px;
    text-align: center;
    border: none;
    background: #a29bfe;
    outline: none;
    border-radius: 30px;
    font-size: 1.2rem;
    color: #FFF;
    cursor: pointer;
    transition: .3s;
}
 
.input-group .btn:hover {
    transform: translateY(-5px);
    background: #6c5ce7;
}
 
.login-register-text, .login-register-text a {
    color: #111;
    font-weight: 600;
    text-decoration: none;
}
 
.login-register-text a {
    color: #6c5ce7;
}
 
@media (max-width: 430px) {
    .container {
        width: 300px;
    }
}

Untuk mengganti gambar, referensikan nama file yang tadi Anda upload ke folder gambar. Di tutorial ini, foldernya adalah Images, dan nama file gambar kami adalah gambar.jpg. Sesuaikan file Anda di bagian url(images/gambar.jpg) dalam kode di atas.

Apabila gambar tidak muncul, pastikan folder gambar sudah berada di direktori yang sama dengan kelima file PHP Anda. Berikut hasil halaman login PHP kami yang sudah diberi gaya dan gambar:

tampilan halaman login dengan session php

5. Tambahkan Fitur Pendaftaran

Anda juga bisa menambahkan fitur pendaftaran bagi pengguna yang belum memiliki akun. Kali ini, Anda perlu menggunakan file register.php yang tadi juga sudah disiapkan.

Kode yang diperlukan akan menggunakan PHP dan HTML lagi, di mana PHP berfungsi untuk meyimpan kredensial pengguna, dan HTML berguna untuk membentuk struktur formulirnya.

Berikut adalah kode yang bisa Anda sisipkan ke file register.php:

<?php
include 'config.php';
session_start();
 
if (isset($_SESSION['username'])) {
    header("Location: index.php");
    exit();
}
 
if (isset($_POST['submit'])) {
    $username = $_POST['username'];
    $email = $_POST['email'];
    $password = hash('sha256', $_POST['password']); // Hash the input password using SHA-256
    $cpassword = hash('sha256', $_POST['cpassword']); // Hash the input confirm password using SHA-256
 
    if ($password == $cpassword) {
        $sql = "SELECT * FROM users WHERE email='$email'";
        $result = mysqli_query($conn, $sql);
        if (!$result->num_rows > 0) {
            $sql = "INSERT INTO users (username, email, password)
                    VALUES ('$username', '$email', '$password')";
            $result = mysqli_query($conn, $sql);
            if ($result) {
                echo "<script>alert('Selamat, pendaftaran berhasil!')</script>";
                $username = "";
                $email = "";
                $_POST['password'] = "";
                $_POST['cpassword'] = "";
            } else {
                echo "<script>alert('Maaf, terjadi kesalahan.')</script>";
            }
        } else {
            echo "<script>alert('Ups, email Sudah Terdaftar.')</script>";
        }
    } else {
        echo "<script>alert('Password tidak sesuai.')</script>";
    }
}
?>
 
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
    <link rel="stylesheet" type="text/css" href="style.css">
    <title>Daftar Akun Hostinger</title>
</head>
<body>
    <div class="container">
        <form action="" method="POST" class="login-email">
            <p class="login-text" style="font-size: 2rem; font-weight: 800;">Gabung Hostinger</p>
            <div class="input-group">
                <input type="text" placeholder="Username" name="username" value="<?php echo $username; ?>" required>
            </div>
            <div class="input-group">
                <input type="email" placeholder="Email" name="email" value="<?php echo $email; ?>" required>
            </div>
            <div class="input-group">
                <input type="password" placeholder="Password" name="password" value="<?php echo $_POST['password']; ?>" required>
            </div>
            <div class="input-group">
                <input type="password" placeholder="Confirm Password" name="cpassword" value="<?php echo $_POST['cpassword']; ?>" required>
            </div>
            <div class="input-group">
                <button name="submit" class="btn">Daftar</button>
            </div>
            <p class="login-register-text">Sudah punya akun? <a href="index.php">Login</a>.</p>
        </form>
    </div>
</body>
</html>

Setelah selesai, jangan lupa untuk menyimpan perubahan Anda.

Nantinya, ketika pengguna mengklik link Daftar pada halaman login, mereka akan diarahkan ke halaman registrasi ini untuk mendaftar akun. Berikut tampilannya saat diakses:

tampilan form pendaftaran yang dibuat dengan session login php

6. Buat Halaman Konfirmasi Berhasil Login

Anda bisa memberi tahu pengunjung bahwa mereka berhasil login untuk menghadirkan pengalaman pengguna yang lebih baik.

Anda perlu menggunakan file berhasil_login.php untuk membuat halaman yang menampilkan konfirmasi login. Apabila pengunjung bisa mengakses halaman ini, artinya Anda PHP session login Anda berhasil dibuat.

Dalam contoh ini, halaman berhasil login kami hanya menampilkan teks “Selamat Datang” dan sebuah tombol untuk logout. Berikut kodenya, yang perlu ditambahkan ke file berhasil_login.php:

<?php
session_start();
 
if (!isset($_SESSION['username'])) {
    header("Location: index.php");
    exit(); // Terminate script execution after the redirect
}
?>
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
    <link rel="stylesheet" type="text/css" href="style.css">
    <title>Login berhasil!</title>
</head>
<body>
    <div class="container-logout">
        <form action="logout.php" method="POST" class="login-email">
            <h1>Selamat datang, <?php echo $_SESSION['username']; ?>!</h1>
            <div class="input-group">
                <button type="submit" class="btn">Logout</button>
            </div>
        </form>
    </div>
</body>
</html>

Seperti inilah tampilan halaman berhasil login yang muncul kalau pengunjung berhasil login:

tampilan halaman berhasil login dengan pesan sambutan selamat datang

7. Tambahkan Fungsi Logout

Di halaman berhasil login, pengguna akan melihat tombol logout, tapi tombol ini belum bisa berfungsi ketika diklik.

Oleh karena itu, Anda bisa menambahkan fungsi logout menggunakan file logout.php. Tambahkan skrip di bawah ini ke file tersebut:

<?php
session_start();
session_unset();
session_destroy();
 
header("Location: index.php");
exit();
?>

Selesai! Anda pun berhasil membuat PHP login session di website Anda. Jangan lupa, uji lagi semua fungsinya untuk memastikan tidak ada error yang muncul, terutama pada bagian koneksi database.

Setelah ini, Anda bisa lanjut menyesuaikan tampilan halaman login Anda dengan mengedit file styles.css, atau menambahkan fungsi lain untuk meningkatkan pengalaman pengguna website Anda.

Kesimpulan

Session login PHP merupakan prosedur penting yang membantu mengamankan akses pengguna. Dengannya, hanya pengguna sah yang bisa masuk ke halaman tertentu menggunakan kredensial yang tepat.

Melalui artikel ini, kami sudah membahas cara membuat PHP login session dengan membuat database MySQL, menghubungkannya dengan PHP, dan menyiapkan file PHP untuk setiap prosesnya. Selain itu, kami juga menambahkan fitur logout untuk meningkatkan pengalaman pengguna website.

Untuk mencegah error umum seperti error establishing a database connection, pastikan semua informasi database Anda sudah direferensikan dengan benar dalam file config.php.

Setelah melakukan semua langkahnya dengan benar, Anda pun berhasil membuat sistem login berbasis PHP yang aman dan mudah digunakan. Selamat mencoba dan semoga berhasil! Apabila masih memiliki pertanyaan, sampaikan lewat kolom komentar, ya.

Author
Penulis

Faradilla A.

Faradilla, yang lebih akrab disapa Ninda, adalah Content Marketing Specialist di Hostinger. Ia suka mengikuti tren teknologi, digital marketing, dan belajar bahasa. Melalui tutorial Hostinger ini, Ninda ingin berbagi informasi dan membantu pembaca menyelesaikan masalah yang dialami. Kenali Ninda lebih dekat di LinkedIn.