Prinsip Utama Session Timeout
Session timeout adalah mekanisme keamanan krusial untuk mengakhiri sesi pengguna setelah periode ketidakaktifan tertentu. Tujuan utamanya adalah meminimalisir risiko akses tidak sah jika perangkat ditinggalkan dalam keadaan login. Implementasi yang efektif harus menyeimbangkan antara postur keamanan yang ketat dan pengalaman pengguna (UX) yang tidak mengganggu.
Durasi Timeout Berdasarkan Tingkat Risiko
Tidak ada durasi universal yang berlaku untuk semua aplikasi. Penentuan waktu harus didasarkan pada sensitivitas data yang diakses oleh pengguna.
| Tingkat Risiko | Contoh Aplikasi | Durasi Timeout Ideal |
|---|---|---|
| Sangat Tinggi | Perbankan, Fintech, Medis | 5 - 15 Menit |
| Tinggi | Dashboard Admin, CRM | 15 - 30 Menit |
| Sedang | E-commerce, Media Sosial | 30 - 60 Menit |
| Rendah | Portal Berita, Blog | 1 - 2 Jam |
Strategi Implementasi Teknis
Untuk mencapai keseimbangan, gunakan pendekatan sliding session atau absolute timeout. Berikut adalah praktik terbaik dalam pengembangan:
- Sliding Session: Memperpanjang durasi sesi setiap kali pengguna melakukan aktivitas (request) baru. Ini memberikan kenyamanan bagi pengguna aktif namun tetap memutus sesi pengguna yang tidak aktif.
- Absolute Timeout: Memaksa logout setelah durasi tertentu (misalnya 8 jam), terlepas dari aktivitas pengguna. Ini penting untuk mencegah sesi yang dicuri tetap aktif dalam jangka panjang.
- Peringatan Sebelum Timeout: Tampilkan modal notifikasi 1-2 menit sebelum sesi berakhir, memberikan opsi kepada pengguna untuk memperpanjang sesi tanpa kehilangan data yang belum tersimpan.
- Penyimpanan Data Sementara: Jika sesi berakhir, pastikan aplikasi menyimpan status input pengguna di local storage atau session storage agar pekerjaan tidak hilang saat pengguna login kembali.
Contoh Implementasi Sederhana (JavaScript)
let timeout;function resetTimer() { clearTimeout(timeout); timeout = setTimeout(logout, 30 * 60 * 1000); // 30 menit}function logout() { window.location.href = '/logout';}window.onload = resetTimer;window.onmousemove = resetTimer;window.onkeypress = resetTimer;Tips Troubleshooting dan Keamanan
Masalah umum yang sering terjadi adalah sesi yang terputus terlalu cepat saat pengguna sedang mengisi formulir panjang. Solusinya adalah menggunakan heartbeat mechanism (polling ringan ke server) atau menyimpan data formulir secara berkala ke backend sebagai draf. Pastikan juga untuk selalu menghapus token sesi dari sisi server (server-side invalidation) saat logout dilakukan, bukan hanya menghapus cookie di sisi klien.