BAB 11 – Session & Login Sederhana: Membuat Autentikasi Dasar di CodeIgniter

BAB 11 – Session & Login Sederhana: Membuat Autentikasi Dasar di CodeIgniter

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

Tujuan Pembelajaran

Setelah menyelesaikan BAB 11, Anda akan mampu:

  1. Memahami fungsi session di CodeIgniter
  2. Membuat form login sederhana
  3. Mengimplementasikan logout
  4. Melindungi halaman agar hanya bisa diakses user login
  5. 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 dan password_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.