Setelah membahas CRUD dan template, langkah penting berikutnya adalah autentikasi user.
Autentikasi memungkinkan aplikasi mengenali siapa pengguna yang login, membatasi akses, dan menjaga keamanan data. CodeIgniter menyediakan session dan flashdata untuk keperluan ini.
Pada BAB ini, kita akan membahas:
- Pengertian session
- Membuat login sederhana
- Logout
- Proteksi halaman
- Flashdata
Contents
Tujuan Pembelajaran
Setelah menyelesaikan BAB 11, Anda akan mampu:
- Memahami fungsi session di CodeIgniter
- Membuat form login sederhana
- Mengimplementasikan logout
- Melindungi halaman agar hanya bisa diakses user login
- Menampilkan flashdata untuk pesan sukses atau error
11.1 Pengertian Session
Session adalah penyimpanan data sementara di server yang digunakan untuk:
- Menyimpan status login user
- Menyimpan informasi sementara, misalnya notifikasi
- Mengontrol akses halaman
📌 Catatan:
- Data session hilang saat user logout atau browser ditutup (tergantung konfigurasi)
- Flashdata adalah session sementara yang otomatis hilang setelah ditampilkan
11.2 Membuat Login Sederhana
1. Tabel Users
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL
);
2. Controller Login
class Login extends CI_Controller {
public function index() {
$this->load->view('login_form');
}
public function auth() {
$username = $this->input->post('username', TRUE);
$password = $this->input->post('password', TRUE);
$user = $this->db->get_where('users', ['username' => $username])->row();
if($user && password_verify($password, $user->password)) {
$this->session->set_userdata('username', $user->username);
$this->session->set_flashdata('success', 'Login berhasil!');
redirect('dashboard');
} else {
$this->session->set_flashdata('error', 'Username atau password salah');
redirect('login');
}
}
}
3. View Login Form (login_form.php)
<h2>Login</h2>
<?php if($this->session->flashdata('error')): ?>
<div style="color:red;"><?= $this->session->flashdata('error') ?></div>
<?php endif; ?>
<form method="post" action="<?= base_url('login/auth') ?>">
<label>Username:</label><br>
<input type="text" name="username"><br>
<label>Password:</label><br>
<input type="password" name="password"><br><br>
<button type="submit">Login</button>
</form>
📌 Tips:
- Password harus di-hash saat disimpan di database
- Gunakan
password_hash()untuk register danpassword_verify()untuk login
11.3 Logout
Controller:
class Login extends CI_Controller {
public function logout() {
$this->session->unset_userdata('username');
$this->session->set_flashdata('success', 'Logout berhasil!');
redirect('login');
}
}
- Menghapus session user
- Menampilkan flashdata sukses logout
11.4 Proteksi Halaman
Untuk menjaga halaman agar hanya bisa diakses user login:
Contoh di Controller Dashboard
class Dashboard extends CI_Controller {
public function __construct() {
parent::__construct();
if(!$this->session->userdata('username')) {
$this->session->set_flashdata('error', 'Silakan login dulu');
redirect('login');
}
}
public function index() {
$this->load->view('dashboard');
}
}
📌 Tips:
- Proteksi halaman penting untuk admin panel atau halaman sensitif
- Bisa dibuat helper agar lebih praktis
11.5 Flashdata
Flashdata adalah session sementara yang hanya muncul satu kali. Cocok untuk menampilkan:
- Pesan sukses login / logout
- Pesan error validasi
Contoh
$this->session->set_flashdata('success', 'Data berhasil disimpan');
View:
<?php if($this->session->flashdata('success')): ?>
<div style="color:green;"><?= $this->session->flashdata('success') ?></div>
<?php endif; ?>
📌 Keunggulan:
- Tidak perlu menghapus session manual
- Otomatis hilang setelah refresh halaman
Penutup
Dengan BAB 11 ini, aplikasi CodeIgniter Anda sudah memiliki autentikasi dasar:
- Login & logout
- Proteksi halaman
- Flashdata untuk pesan sukses/error
Langkah berikutnya bisa mengembangkan fitur user management lengkap, role-based access, dan keamanan lebih lanjut, sehingga aplikasi lebih profesional dan aman.