Gambar 1. Background Merah Dengan Teks (sumber: https://www.pexels.com/)

Dalam mendesain sistem analisis dan arsitektur perangkat lunak, menentukan mekanisme pelacakan status pengguna (session tracking) adalah salah satu keputusan paling krusial. Keputusan ini tidak hanya berdampak pada performa tingkat tinggi (Core Capability), tetapi juga memengaruhi aspek operasional bisnis, keandalan sistem di lapangan, dan kepatuhan terhadap regulasi privasi data (Domain Capability).  Dua pendekatan utama yang mendominasi industri saat ini adalah Session-Based Authentication (Stateful) dan JSON Web Token / JWT (Stateless).

Session-Based Authentication (Stateful)

Pendekatan Session-Based adalah metode tradisional yang mengandalkan memori atau penyimpanan di sisi server untuk mengingat siapa pengguna yang sedang aktif.

Cara Kerja: Ketika pengguna berhasil login, server akan membuat sebuah rekaman data (session) di dalam database atau memori cepat (seperti Redis) dan menghasilkan sebuah ID unik (Session ID). ID ini kemudian dikirimkan kembali ke browser dan disimpan di dalam cookie yang aman. Pada setiap request berikutnya, browser otomatis mengirimkan cookie tersebut, dan server harus mencocokkannya dengan data yang ada di penyimpanan pusat.

Kelebihan: Keunggulan terbesar metode ini adalah manajemen kendali yang mutlak. Jika sebuah akun terindikasi melakukan kecurangan atau hak aksesnya dicabut oleh admin, server dapat langsung menghapus data session tersebut. Pengguna akan seketika ter-logout (immediate revocation).

Kekurangan: Karena setiap interaksi membutuhkan pengecekan ke penyimpanan pusat, metode ini kurang efisien untuk arsitektur microservices yang masif atau terdistribusi secara horizontal. Skalabilitas server menjadi terikat pada performa session store pusat.

JWT Authentication (Stateless)

JWT (JSON Web Token) hadir sebagai solusi modern untuk mengatasi ketergantungan pada penyimpanan terpusat, menggeser beban validasi dari server ke kriptografi.

Cara Kerja: Setelah login berhasil, server tidak menyimpan data apa pun di memorinya. Sebagai gantinya, server mengemas informasi pengguna (payload seperti ID dan role) ke dalam sebuah token, lalu menandatanganinya secara digital menggunakan kunci rahasia (secret key). Token ini dipegang sepenuhnya oleh klien (browser atau aplikasi mobile). Setiap kali klien mengirim request, server cukup memvalidasi tanda tangan digital token tersebut menggunakan kunci rahasianya sendiri.

Kelebihan: Sifatnya yang stateless membuat setiap layanan atau microservices dapat memverifikasi identitas pengguna secara mandiri tanpa perlu melakukan kueri jaringan ke server pusat. Ini menghemat bandwidth dan menurunkan latensi secara signifikan.

Kekurangan: Karena data disimpan di sisi klien, token yang sudah diterbitkan tidak dapat dibatalkan secara instan sebelum masa aktifnya (expiration time) habis. Jika token jatuh ke tangan yang salah (misalnya melalui serangan Cross-Site Scripting karena disimpan di LocalStorage), peretas memegang kendali penuh hingga token tersebut kedaluwarsa.

Sebagai kesimpulan diantara kedua metode ini, tidak ada pemenang mutlak antara JWT dan Session. Rekayasa perangkat lunak yang baik bukan mencari teknologi terbaik, melainkan teknologi yang paling sesuai dengan konteks masalah. Gunakan Session-Based jika kontrol penuh dan keamanan instan terhadap data sensitif adalah prioritas utama. Sebaliknya, pilih JWT jika lebih mengutamakan performa, desentralisasi layanan, dan skalabilitas horizontal sistem.

 

Referensi

  • https://developer.mozilla.org/en-US/docs/Web/Security/Authentication/Session_management
  • https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Cookies
  • https://auth0.com/learn/json-web-tokens
  • https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html