Bayangkan kamu masuk ke minimarket, ambil barang, lalu pergi ke kasir — tapi kasirnya nggak ingat siapa kamu dan kamu harus kenalan ulang setiap langkah. Menyebalkan, kan? Nah, itulah yang terjadi di web kalau tidak ada session dan cookie. Dua mekanisme inilah yang membuat sistem autentikasi Laravel Breeze bisa "mengingat" pengguna yang sudah login tanpa harus verifikasi ulang di setiap halaman. Di artikel ke-25 dari 50 Artikel Belajar Laravel ini, kamu akan belajar konsep dan implementasi session & cookie secara mendalam — lengkap dengan kode siap pakai.
Session vs Cookie — Apa Bedanya?
Session adalah data yang disimpan di sisi server dan diidentifikasi via ID unik yang dikirim ke browser. Cookie adalah data kecil yang disimpan langsung di browser pengguna dan dikirim ke server di setiap request. Keduanya bekerja bersama dalam sistem autentikasi Laravel Breeze untuk menjaga state pengguna.
🗄️ Memahami Session di Laravel: Loker Digital Kamu
Coba bayangkan session seperti loker di perpustakaan. Saat kamu masuk (login), kamu dapat kunci loker (session ID). Semua barang kamu (data: nama, role, preferensi) disimpan di dalam loker itu di server. Kamu cukup bawa kuncinya — dan setiap kali minta sesuatu ke server, kunci itulah yang dipakai untuk mengambil datamu. Itulah cara session bekerja dalam konteks autentikasi Laravel Breeze.
Laravel mendukung beberapa driver session secara bawaan. Kamu bisa mengonfigurasinya di file .env atau config/session.php.
Tips untuk Pemula
Untuk proyek belajar dan latihan, driver file sudah lebih dari cukup. Jangan khawatir soal Redis dulu — fokus pahami konsepnya, baru optimalkan saat naik ke produksi.
Cara Menggunakan Session di Laravel — Step by Step
Menyimpan Data ke Session
Gunakan helper session() atau facade Session:: untuk menyimpan data.
// Cara 1: Helper function session(['user_role' => 'admin']); // Cara 2: Method put() session()->put('user_role', 'admin'); // Cara 3: Facade (di Controller) use Illuminate\Support\Facades\Session; Session::put('user_role', 'admin'); // Dari Request object (di Controller) $request->session()->put('user_role', 'admin');
Mengambil & Mengecek Data Session
// Ambil nilai (dengan default jika tidak ada) $role = session('user_role', 'guest'); // Cek apakah key ada if (session()->has('user_role')) { // Session user_role ada dan bukan null } // Ambil lalu hapus sekaligus (flash-like) $role = session()->pull('user_role', 'guest'); // Ambil semua session $allData = session()->all();
Menghapus Data Session
// Hapus satu key session()->forget('user_role'); // Hapus beberapa key sekaligus session()->forget(['user_role', 'cart_items']); // Hapus SEMUA session (flush) — dipakai saat logout! session()->flush(); // Invalidate dan regenerate session ID (lebih aman) $request->session()->invalidate(); $request->session()->regenerateToken();
🍪 Cookie di Laravel & Autentikasi Laravel Breeze
Kalau session itu seperti loker di perpustakaan, maka cookie adalah kertas catatan kecil yang kamu bawa sendiri. Browser menyimpannya, dan secara otomatis mengirimkannya ke server di setiap request. Di sistem autentikasi Laravel Breeze, cookie "remember me" adalah contoh nyata penggunaan cookie — ketika kamu centang "Ingat Saya", Laravel menyimpan token terenkripsi di cookie browser kamu selama beberapa hari.
Laravel secara default mengenkripsi semua cookie menggunakan app key-mu. Jadi meskipun cookie disimpan di browser, isinya tidak bisa dibaca sembarangan oleh pengguna atau pihak lain.
Insight Penting
Di balik fitur "Remember Me" pada autentikasi Laravel Breeze, Laravel menyimpan hash token di tabel remember_tokens di database, lalu meletakkan token tersebut di cookie browser. Inilah cara Laravel memverifikasi pengguna bahkan setelah session berakhir.
Membuat & Membaca Cookie di Laravel
Mengirim Cookie via Response
use Illuminate\Support\Facades\Cookie; public function setUserPreference(Request $request) { // Cookie bertahan 60 menit $cookie = Cookie::make( 'theme', // nama 'dark', // nilai 60 // menit ); return redirect('/')->withCookie($cookie); } // Cookie permanen (5 tahun) $forever = Cookie::forever('remember_token', $token);
Membaca & Menghapus Cookie
// Membaca cookie dari request $theme = $request->cookie('theme', 'light'); // default: light // Atau via helper $theme = Cookie::get('theme'); // Menghapus cookie (set expire = masa lalu) return response('OK') ->withCookie(Cookie::forget('theme')); // Cookie yang TIDAK dienkripsi Laravel // Tambahkan nama-nya ke $except di EncryptCookies.php: protected $except = ['tracking_id'];
Perhatian!
Jangan pernah simpan data sensitif (password, token penting, data kartu kredit) langsung di cookie tanpa enkripsi tambahan. Meskipun Laravel mengenkripsi cookie secara default, cookie tetap bisa dilihat di browser developer tools. Simpan data sensitif di session (server-side) atau database saja.
🔐 Session dalam Alur Autentikasi Laravel Breeze
Saat kamu install autentikasi Laravel Breeze, framework secara otomatis mengatur alur session yang aman. Yuk kita bedah apa yang sebenarnya terjadi ketika user login:
🔍 Analisis Alur Autentikasi
Apa yang terjadi saat user login via Laravel Breeze?
/login dengan email + passwordAuthenticatedSessionController memvalidasi kredensial via Auth::attempt()$request->session()->regenerate() untuk mencegah session fixation attacklaravel_sessionauth membaca session ID dari cookie, mencari data di storage, dan mengautentikasi user secara otomatis ✅Praktik Nyata: Session di Controller
namespace App\Http\Controllers; use Illuminate\Http\Request; class ProfileController extends Controller { public function updateTheme(Request $request) { $request->validate([ 'theme' => 'required|in:light,dark' ]); // Simpan preferensi tema di session $request->session()->put('theme', $request->theme); // Flash message untuk notifikasi $request->session()->flash('success', 'Tema berhasil diperbarui!'); return back(); } public function show(Request $request) { // Baca session tema, default ke 'light' $theme = $request->session()->get('theme', 'light'); return view('profile.show', compact('theme')); } }
Fakta Menarik
Laravel secara otomatis memanggil session()->regenerate() setelah login berhasil. Ini adalah langkah keamanan krusial untuk mencegah Session Fixation Attack — serangan di mana hacker "menetapkan" session ID korban sebelum login, lalu mengambil alih akun mereka setelah login berhasil.
Koneksi ke Artikel Berikutnya
Kamu mungkin perhatikan kode session()->flash() di atas. Flash session adalah session yang hanya hidup untuk satu request berikutnya — sangat berguna untuk notifikasi sukses/error. Topik ini akan dibahas tuntas di Artikel 26: Notifikasi & Alert dengan Session Flash Message!
✅ Kesimpulan
Kamu Sekarang Paham Fondasi Autentikasi Laravel Breeze!
Session menyimpan data di sisi server dan diidentifikasi via cookie session ID — aman untuk data sensitif seperti info user yang login.
Cookie menyimpan data di browser — cocok untuk preferensi ringan non-sensitif, dan Laravel mengenkripsinya secara otomatis.
Autentikasi Laravel Breeze menggunakan keduanya secara cerdas — session untuk menyimpan state login, cookie untuk mengirimkan session ID dan fitur "Remember Me".
Session regeneration adalah mekanisme keamanan otomatis yang melindungi dari session fixation attack setiap kali user berhasil login.
Ini adalah artikel ke-25 dari Seri 50 Artikel Belajar Laravel. Setiap artikel saling terhubung — jadi pastikan kamu tidak melewatkan satu pun! 🚀
No comments:
Post a Comment