Banner - Cara Membuat Database Session di Laravel

Cara Membuat Database Session di Laravel

Dalam proses pengembangan aplikasi web, menjaga sesi pengguna tetap stabil menjadi hal yang penting, terutama ketika aplikasi mulai digunakan oleh banyak user. Karena itulah, mengetahui cara membuat database session di Laravel menjadi penting, agar penyimpanan session menjadi lebih terpusat dan tidak hanya bergantung pada file bawaan server.

Secara default, Laravel menyimpan session menggunakan file driver. Namun, metode ini terkadang kurang ideal untuk aplikasi yang membutuhkan skalabilitas, monitoring, maupun sinkronisasi session antar server. Dengan menggunakan database session, data seperti status login dan aktivitas pengguna dapat disimpan langsung ke tabel database sehingga lebih mudah dikelola dan dipantau.

Di artikel ini, kita akan membahas cara membuat database session di Laravel, mulai dari konfigurasi driver, pembuatan tabel session, hingga proses implementasinya pada aplikasi Laravel.

Apa fungsi database session di Laravel?

Database session di Laravel adalah metode penyimpanan session pengguna langsung ke dalam tabel database. Berbeda dengan session bawaan yang menyimpan data dalam bentuk file di server, metode ini membuat pengelolaan session menjadi lebih terpusat dan mudah dipantau.

Penggunaan database session sangat cocok untuk aplikasi dengan skala yang lebih besar, terutama yang berjalan pada beberapa server sekaligus. Saat pengguna login, data session akan disimpan ke database sehingga status login tetap konsisten meskipun pengguna diarahkan ke server yang berbeda.

Selain membantu menjaga stabilitas session, metode ini juga memudahkan developer untuk memantau, mengelola, atau menghentikan session pengguna tertentu secara lebih spesifik ketika diperlukan.

Pindah Hosting ke Rumahweb Gratis

Membuat database session di Laravel

Untuk membuat database session di Laravel, langkah pertama yang perlu dilakukan adalah memastikan koneksi database aplikasi sudah berjalan dengan baik, baik menggunakan MySQL maupun database lainnya. Setelah itu, ubah session driver Laravel menjadi database pada file .env seperti berikut:

SESSION_DRIVER=database

Jika Anda menggunakan Laravel versi 10 ke atas, tabel session biasanya sudah tersedia secara default di folder database/migrations/. Namun, pada Laravel versi di bawah 10, Anda perlu membuat migration tabel session secara manual menggunakan perintah berikut:

php artisan session:table

Selanjutnya, jalankan proses migrasi agar tabel session dibuat di database:

php artisan migrate

Selanjutnya, silahkan untuk menjalankan php artisan migrate untuk membuat table pada database anda.

Hasil Migration data ke mysql

Setelah menjalankan PHP artisan migrate, selanjutnya kita perlu membuat controller dengan perintah berikut melalui terminal.

php artisan make:controller SessionUIController

Lalu, masukan script berikut pada file controlernya.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class SessionUIController extends Controller
{
    public function index () {
        $namaSesi = session()->get('pengguna', 'Belum ada data sesi');
        return view ('session-ui', compact ('namaSesi'));
    }

    public function store (Request $request) {
        $request->validate([
            'nama_pengguna' =>'required|string|max:255'
        ]);

        session()->put('pengguna', $request->input('nama_pengguna'));
        return redirect()->back()->with('status','Sukses membuat database session, dan di simpan di database');
    }

    public function destroy () {
        session()->forget('pengguna');
        return redirect()->back()->with('status','Session database berhasil dihapus');
    }
}

Pada controller tersebut, public function index digunakan untuk menampilkan data session yang sudah tersimpan. Jika belum ada data session, maka aplikasi akan menampilkan informasi bahwa data session belum tersedia.

Selanjutnya, public function store berfungsi untuk menyimpan data session ke tabel sessions. Pada contoh ini, data yang disimpan berupa string dengan panjang maksimal 255 karakter, kemudian sistem akan mengembalikan status atau pesan sesuai proses yang dijalankan melalui return redirect.

Sedangkan public function destroy digunakan untuk menghapus session yang sedang aktif. Function ini juga akan membuat session ID baru sehingga session lama tidak dapat digunakan kembali.

Setelah proses pembuatan controller selesai, langkah berikutnya adalah membuat route. Di Laravel, route berfungsi untuk mengatur alur request URL dan menghubungkan halaman yang diakses pengguna ke controller, view, atau logic tertentu di dalam aplikasi.

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\SessionUIController;

Route::get('/tes-sesi', [SessionUIController::class, 'index']) >name('sesi.index');
Route::post('/tes-sesi/simpan', [SessionUIController::class,'store']) >name('sesi.store');
Route::post('/tes-sesi/hapus', [SessionUIController::class,'destroy'])->name('sesi.destroy');

Membuat Tampilan View dan Menampilkan Notifikasi

Buat file baru pada resources/views dengan nama file session-ui.blade.php atau bisa disesuaikan dengan keinginan.

<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Uji Coba Database Session</title>
    <style>
        body { font-family: Arial, sans-serif; background-color: #f4f7f6; padding: 50px; }
        .container { max-width: 500px; margin: 0 auto; background: white; padding: 30px; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1); }
        .alert { padding: 10px; background-color: #d4edda; color: #155724; border-radius: 4px; margin-bottom: 20px; }
        .session-box { padding: 15px; background-color: #e2e3e5; border-radius: 4px; margin-bottom: 20px; font-weight: bold; text-align: center; }
        input[type="text"] { width: 100%; padding: 10px; margin-bottom: 15px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; }
        button { padding: 10px 15px; border: none; border-radius: 4px; cursor: pointer; font-weight: bold; }
        .btn-save { background-color: #007bff; color: white; }
        .btn-delete { background-color: #dc3545; color: white; width: 100%; margin-top: 10px;}
    </style>
</head>
<body>

<div class="container">
    <h2>Manajemen Sesi Database</h2>

    @if(session('status'))
        <div class="alert">
            {{ session('status') }}
        </div>
    @endif

    <div class="session-box">
        Data Sesi Saat Ini:<br>
        <span style="font-size: 24px; color: #333;">{{ $namaSesi }}</span>
    </div>

    <form action="{{ route('sesi.store') }}" method="POST">
        @csrf
        <label for="nama_pengguna">Masukkan Nama Baru:</label>
        <input type="text" id="nama_pengguna" name="nama_pengguna" placeholder="Ketik nama Anda di sini..." required>
        <button type="submit" class="btn-save">Simpan ke Sesi</button>
    </form>

    <form action="{{ route('sesi.destroy') }}" method="POST">
        @csrf
        <button type="submit" class="btn-delete">Hapus Data Sesi</button>
    </form>
</div>

</body>
</html>

Pengujian

Setelah seluruh kode berhasil disusun, langkah terakhir adalah melakukan pengujian untuk memastikan flash session berfungsi sebagaimana mestinya. Jalankan server lokal Anda dengan perintah php artisan serve, kemudian akses URL tutorial melalui browser.

Tampilan Cek sesi membuat sesi dan menghapus sesi

Kita cek juga didatabase apakah data sesinya terbuat dengan baik atau tidak, jika berhasil maka tersimpan di database seperti berikut:

Sesi berhasil dibuat dan masuk di table session - Membuat Database Session di Laravel

Setelah itu kita coba hapus data sesi, apakah di database idnya berubah atau tidak.

Klik hapus data sesi
Data Sesi Berhasil dihapus

Kemudian silahkan cek pada database apakah id datanya berubah atau tidak, jika berubah maka itu sudah benar untuk function sebelumnya yang kita buat.

ID sesi berubah di table session

Sampai tahap pengujian ini, Anda seharusnya sudah memahami fungsi database session di Laravel dan bagaimana mekanisme penyimpanannya bekerja. Mungkin Anda juga menyadari bahwa data session tidak langsung terhapus dari database setelah proses logout dilakukan.

Hal ini sebenarnya normal karena data session tersebut masih dapat digunakan sebagai kebutuhan log atau riwayat aktivitas pengguna. Namun, Anda tidak perlu khawatir karena session ID pengguna akan berubah setelah logout sehingga session lama sudah tidak lagi aktif dan tidak dapat digunakan kembali.

Mekanisme ini sangat berguna jika Anda ingin mengembangkan fitur seperti riwayat login/logout pengguna, monitoring perangkat yang digunakan, atau kebutuhan autentikasi lainnya pada aplikasi Laravel.

Penutup

Menggunakan database session di Laravel dapat membantu membuat aplikasi lebih stabil, mudah dipantau, dan lebih siap digunakan pada server berskala besar. Karena data session tersimpan langsung di database, proses monitoring maupun pengelolaan session pengguna juga menjadi lebih mudah dilakukan.

Saat pengguna logout, Laravel tidak selalu langsung menghapus data session dari database. Sistem biasanya akan membuat session ID baru sehingga session lama tidak lagi aktif dan tetap aman digunakan.

Demikian pembahasan tentang cara membuat database session di Laravel. Jika aplikasi mulai berkembang dan digunakan oleh banyak pengguna, pastikan juga menggunakan server yang sesuai agar performa aplikasi tetap optimal. Semoga artikel ini bermanfaat.

Bermanfaatkah Artikel Ini?

Klik bintang 5 untuk rating!

Rating rata-rata 0 / 5. Vote count: 0

Belum ada vote hingga saat ini!

Kami mohon maaf artikel ini kurang berguna untuk Anda!

Mari kita perbaiki artikel ini!

Beri tahu kami bagaimana kami dapat meningkatkan artikel ini?

Arief Hidayatullah

Arief Hidayatullah adalah seorang Technical Support di Rumahweb Indonesia yang memiliki minat dan keahlian dalam pengembangan web. Dengan pengalaman dan pengetahuannya di bidang teknologi, Arief memiliki ketertarikan khusus dalam pengembangan web menggunakan Laravel, sebuah framework PHP yang populer. Dengan semangat belajar dan eksplorasi teknologi, Arief terus mengembangkan keterampilannya untuk menciptakan solusi web yang efisien dan inovatif.