Pada dasarnya, suatu request yang dilakukan user melalui port HTTP tidak diketahui identitasnya (independent), hal ini menjadi penting ketika server harus mengetahui user manakah yang melakukan suatu request terhadap layanan (service) tersebut. Bayangkan jika dalam satu waktu ada ratusan bahkan ribuan request ke server, apa yang akan terjadi?
Untuk mengetahui konsep stateless, kita harus fahami dulu stateful. Kita anggap terdapat suatu kondisi dimana ada “0” dan “1” atau “Yes” dan “No” atau sebaliknya. Maka ketika perubahan yang terjadi pada salah satu kondisi tersebut, kita anggap itu sebagai state.
Stateful
Stateful artinya kondisi dimana system menyimpan identitas user (biasanya di basis data) pada waktu tertentu (misal proses login) sehingga memiliki kondisi dengan nilai true.
Kelebihan
- Pesan request lebih pendek.
- Performanya lebih baik.
- Memungkinkan Read ahead.
- Dimungkinkan (untuk penulisan) Penguncian file.
- Dimungkinkan pemberitahuan yang diprakarsai oleh server.
Kekurangan
- Lebih kompleks daripada stateless
- memerlukan lebih banyak memori untuk melacak koneksi aktif
- Lebih sulit dikelola daripada stateless
- Beberapa protokol tidak dapat diinspeksi dari TCP dan IP
Stateless
Stateless kebalikkan dari stateful, jika stateful memerlukan sesi identitas user pada saat tertentu, maka pada stateless tidak. User dapat menggunakan resource yang ada pada server tanpa harus menyimpan sesi setiap waktu. Representational State Transfer (REST) API merupakan stateless service yang sangat popular dan banyak dikembangkan untuk berbagai macam aplikasi, khususnya web. Contoh: Twitter API
Kelebihan
- Mengurangi penggunaan memori
- Lebih mudah untuk mendukung layanan server
- Mengurangi masalah kedaluwarsa session
- Keterkaitan URL lebih mudah
Kekurangan
- Melibatkan Secrete Key
- Tidak dapat mengelola klien dari server
- Tidak dapat mendorong Pesan ke klien (Mengidentifikasi klien dari server)
- Crypto-algo dapat ditinggalkan
- Overhead Data
- Rumit untuk difahmi
Contoh Penerapan
Kesimpulan
| Cookie | Session |
| Cookie adalah file sisi klien yang berisi informasi pengguna | Sesi adalah data di sisi server yang berisi informasi pengguna |
| Cookie bisa berakhir tergantung pada masa pakai yang ditetapkan | Sesi berakhir ketika pengguna menutup browsernya |
| Anda tidak perlu memulai cookie karena disimpan di mesin lokal Anda | Di PHP, sebelum menggunakan $_SESSION, Anda harus menulis session_start(); Begitu juga dengan bahasa lainnya |
| Ukuran cookie maksimum resmi adalah 4KB | Dalam sesi Anda dapat menyimpan data sebanyak yang Anda suka. Satu-satunya batasan yang dapat Anda capai adalah memori maksimum yang dapat digunakan skrip pada satu waktu, yaitu 128MB secara default |
| Cookie tidak bergantung pada Sesi | Sesi bergantung pada Cookie |
| Tidak ada fungsi bernama unsetcookie() | Sesi_hancurkan(); digunakan untuk menghancurkan semua data yang terdaftar atau untuk membatalkan beberapa |
Referensi
- Robin Nixon, Learning PHP, MySQL, JavaScript, CSS & HTML5
- https://nordicapis.com/defining-stateful-vs-stateless-web-services/
- https://www.xenonstack.com/insights/stateful-and-stateless-applications/
- https://www.w3schools.com/php/php_sessions.asp
- https://www.w3schools.com/php/php_cookies.asp
- https://github.com/malasngoding/login-multi-user-level-dengan-php-dan-mysqli
- https://www.guru99.com/difference-between-cookie-session.html