Dalam pengembangan web, sistem login dan logout di PHP dengan session adalah fitur dasar yang memastikan hanya pengguna yang berhak dapat mengakses halaman tertentu. Sayangnya, banyak pemula masih membuat login tanpa keamanan — misalnya menyimpan password secara plain text.
Pada artikel ini, kamu akan belajar membuat sistem login dan logout dengan keamanan modern:
-
Menggunakan
password_hash()danpassword_verify() -
Menyimpan sesi login menggunakan
$_SESSION -
Logout dengan aman menggunakan
session_destroy()
Persiapan Database
Buat database bernama db_login dan tabel users seperti berikut:
CREATE DATABASE db_login; USE db_login; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(100) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL );
Membuat File Koneksi (config.php)
Gunakan MySQLi (Object Oriented):
<?php
$host = "localhost";
$user = "root";
$pass = "";
$db = "db_login";
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
die("Koneksi gagal: " . $conn->connect_error);
}
?>
Membuat Halaman Register (register.php)
Halaman ini berfungsi untuk menambahkan pengguna baru dengan password yang di-hash.
<?php
include 'config.php';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = trim($_POST['username']);
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$stmt = $conn->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
$stmt->bind_param("ss", $username, $password);
if ($stmt->execute()) {
echo "<div class='alert alert-success'>Registrasi berhasil! Silakan login.</div>";
} else {
echo "<div class='alert alert-danger'>Username sudah digunakan!</div>";
}
}
?>
<form method="POST">
<h3>Register</h3>
<input type="text" name="username" placeholder="Username" required><br>
<input type="password" name="password" placeholder="Password" required><br>
<button type="submit">Daftar</button>
</form>
Membuat Halaman Login (login.php)
Gunakan password_verify() untuk mencocokkan password yang diinput dengan yang tersimpan di database.
<?php
session_start();
include 'config.php';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = trim($_POST['username']);
$password = $_POST['password'];
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
$user = $result->fetch_assoc();
if (password_verify($password, $user['password'])) {
$_SESSION['user'] = $user['username'];
$_SESSION['login_time'] = time();
session_regenerate_id(true);
header("Location: dashboard.php");
exit;
} else {
echo "<div class='alert alert-danger'>Password salah!</div>";
}
} else {
echo "<div class='alert alert-danger'>Username tidak ditemukan!</div>";
}
}
?>
<form method="POST">
<h3>Login</h3>
<input type="text" name="username" placeholder="Username" required><br>
<input type="password" name="password" placeholder="Password" required><br>
<button type="submit">Masuk</button>
</form>
Membuat Halaman Dashboard (dashboard.php)
Halaman ini hanya bisa diakses jika pengguna sudah login.
<?php
session_start();
if (!isset($_SESSION['user'])) {
header("Location: login.php");
exit;
}
?>
<h2>Selamat Datang, <?php echo $_SESSION['user']; ?>!</h2>
<p>Anda berhasil login.</p>
<a href="logout.php">Logout</a>
Membuat Halaman Logout (logout.php)
Logout dilakukan dengan menghapus semua data session.
<?php
session_start();
session_unset();
session_destroy();
header("Location: login.php");
exit;
?>
Tips Keamanan Tambahan
Gunakan HTTPS
Pastikan situs kamu menggunakan SSL agar data login tidak mudah disadap.
Batasi Percobaan Login
Simpan percobaan gagal di database dan blokir sementara setelah beberapa kali gagal.
Gunakan session timeout
Logout otomatis jika pengguna tidak aktif terlalu lama:
<?php
if (isset($_SESSION['login_time']) && (time() - $_SESSION['login_time'] > 1800)) {
session_destroy();
header("Location: login.php?timeout=true");
}
?>
Validasi Input
Hindari SQL Injection dengan prepared statements seperti contoh di atas.
Kesimpulan
Dengan memanfaatkan session, password_hash(), dan password_verify(), kamu dapat membangun sistem login dan logout yang aman dan modern di PHP. Langkah-langkah ini adalah pondasi utama sebelum melangkah ke fitur yang lebih kompleks seperti manajemen pengguna dan role-based access control (RBAC).