Lewati ke konten utama
menjadi.dev
Chapter 1.6 Fundamental Web Pemula

HTTP Stateless dan Cara Kerja Session

Konsep stateless, cookie, dan session management

Tujuan Pembelajaran

  • Memahami konsep stateless dalam HTTP
  • Mengerti cara kerja cookie dan session

Analogi

Diagram

      HTTP Stateless = Kasir Restoran yang Punya Amnesia:

Kamu: "Pesan nasi goreng"
Kasir: "Oke, ini pesananmu!" (LUPA)
Kamu: "Tambah es teh"
Kasir: "Maaf, siapa kamu? Pesan apa tadi?"

SOLUSI: Token/Cookie = Struk Pesanan dengan Nomor:
Kasir: "Ini struk nomor #42. Tanya aja nomor ini."
Kamu: "Pesanan nomor 42, tambah es teh"
Kasir: "Oke, nasi goreng + es teh untuk nomor 42!"
    

Cookie = struk pesanan dengan nomor, supaya server ingat siapa kamu

Penjelasan Konsep

Ada satu karakteristik unik HTTP yang harus kamu pahami: HTTP itu stateless (tanpa keadaan). Apa artinya? Artinya, setiap request yang kamu kirim ke server dianggap sebagai request yang sepenuhnya independen. Server tidak secara otomatis mengingat request sebelumnya.

Ini seperti pelayan restoran yang punya amnesia — setiap kali kamu bicara,

Dia lupa siapa kamu dan apa yang sudah kamu pesan sebelumnya.

Kenapa HTTP dibuat stateless?

Ada beberapa alasan bagus.

Pertama, stateless membuat server lebih sederhana dan tidak perlu menyimpan informasi setiap client di memori — ini sangat penting karena sebuah server bisa melayani ribuan atau jutaan client secara bersamaan.

Bayangkan kalau server harus mengingat setiap interaksi dengan setiap user yang pernah terkoneksi — memorinya akan cepat penuh!

Kedua, stateless membuat sistem lebih reliable.

Kalau satu server mati, request bisa dialihkan ke server lain tanpa khawatir kehilangan “status” karena setiap request sudah lengkap dengan semua informasi yang dibutuhkan.

Tapi di dunia nyata, kita BUTUH server mengingat siapa kita.

Kalau kamu login ke Facebook, kamu nggak mau kan setiap klik link harus login ulang?

Kalau kamu belanja di Tokopedia dan tambah barang ke keranjang, keranjangnya harus tetap ada walaupun kamu pindah halaman.

Nah, disinilah teknologi cookie dan session berperan.

Cookie adalah data kecil yang server kirim ke browser,

Dan browser akan menyimpannya serta mengirimkannya kembali di setiap request berikutnya ke domain yang sama.

Bayangkan cookie seperti kartu member di restoran — setelah kamu daftar, kamu dapat kartu. Setiap kali kamu datang, kamu tunjukkan kartu itu dan pelayan langsung tahu siapa kamu, apa preferensimu, dan poin loyalty-mu berapa.

Cara kerja cookie:

  1. Kamu login ke website → server buat session di server-side → kirim session ID lewat cookie ke browser.
  2. Browser simpan cookie tersebut (biasanya di file kecil di komputermu).
  3. Setiap request berikutnya ke website yang sama, browser otomatis kirim cookie tersebut di header.
  4. Server terima cookie → baca session ID → cari data session di memory/database → tahu siapa kamu.

Session: Lemari Arsip Server

Session adalah data yang disimpan di server yang berisi informasi tentang user yang sedang login.

Session ID (biasanya random string seperti a3f7b2d9e1) adalah “kunci” yang menghubungkan cookie di browser dengan data session di server.

Session bisa disimpan di memory server (cepat tapi hilang kalau server restart), di database Redis (paling umum untuk production), atau di database biasa.

Authentication vs Authorization

Dua konsep ini sering tertukar tapi sangat berbeda:

  • Authentication = Membuktikan identitas. “Siapa kamu?” Proses login adalah authentication — kamu buktikan bahwa kamu memang Budi dengan memasukkan password yang benar.
  • Authorization = Menentukan izin akses. “Apa yang boleh kamu lakukan?” Setelah server tahu kamu Budi,

Authorization menentukan apakah Budi boleh mengakses halaman admin atau tidak.

  • HttpOnly: Cookie tidak bisa diakses oleh JavaScript (melindungi dari XSS attack).
  • Secure: Cookie hanya dikirim melalui HTTPS (aman dari sniffing).
  • SameSite: Mengontrol kapan cookie dikirim ke website lain (melindungi dari CSRF attack).
  • Max-Age/Expires: Menentukan kapan cookie kadaluarsa.
  • Domain dan Path: Menentukan scope cookie — cookie mana yang dikirim ke URL apa.

Kenapa memahami ini penting?

Karena setiap aplikasi web yang memiliki fitur login menggunakan mekanisme ini.

Memahami cookie, session, dan perbedaan authentication-authorization akan membantumu membangun sistem yang aman dan scalable. Keamanan web modern — dari JWT token hingga OAuth — semuanya dibangun di atas fondasi konsep stateless HTTP dan solusi cookie-session ini.

Contoh Kode

javascript
// ====== Set dan Get Cookie di JavaScript ======
// Set cookie (expire dalam 7 hari)
document.cookie = "sessionId=abc123; expires=Thu, 18 Dec 2025 12:00:00 UTC; path=/";

// Baca semua cookie
console.log(document.cookie);  // "sessionId=abc123; token=xyz789"

// ====== localStorage (alternatif cookie) ======
// Simpan data di browser (tidak expired kecuali dihapus)
localStorage.setItem('user', JSON.stringify({ nama: 'Budi', id: 123 }));
const user = JSON.parse(localStorage.getItem('user'));
console.log(user.nama);  // "Budi"

// sessionStorage (hilang saat tab ditutup)
sessionStorage.setItem('tempData', 'ini data sementara');

Penjelasan Kode

Baris 2-3: Set cookie dengan expiration. Baris 6: Baca cookie. Baris 9-12: localStorage untuk data persisten. Baris 15: sessionStorage untuk data sementara.

Prompt AI

Jelaskan perbedaan cookie, localStorage, dan sessionStorage. Kapan menggunakan masing-masing? Apa risiko keamanan dari menyimpan token JWT di localStorage?

Pertanyaan Reflektif

Buka DevTools → Application → Cookies / Local Storage / Session Storage. Lihat data apa yang disimpan website favoritmu. Apakah ada informasi sensitif?