Statefulness tidak selalu merupakan hal yang buruk, tetapi Anda perlu memahami perbedaan antara aplikasi stateful dan stateless. Singkatnya, aplikasi stateful menjaga informasi tentang sesi saat ini, dan aplikasi stateless tidak. Informasi yang disimpan secara permanen sebagai bagian dari akun pengguna mungkin atau mungkin tidak disimpan dalam suatu sesi, tetapi menyimpan informasi yang terkait dengan akun pengguna tidak dengan sendirinya membuat aplikasi menjadi stateful. Statefulness mengharuskan server mempertahankan informasi tentang sesi pengguna saat ini di luar apa yang dipertahankan oleh browser klien. Misalnya, klien dapat mengotentikasi dan diberi cookie JSESSIONID, yang kemudian dikirimkan ke server dengan setiap permintaan. Jika server mulai menyimpan hal-hal dalam lingkup sesi aplikasi berdasarkan JSESSIONID ini, itu menjadi stateful.
Kewarganegaraan
Dengan stateless, maksud kami adalah server dan klien tidak menjaga informasi terkini tentang sesi pengguna. Klien dan server dapat menggunakan beberapa bentuk token untuk menyediakan otentikasi antara permintaan, tetapi tidak ada informasi terkini lainnya yang disimpan. Kasus penggunaan yang umum untuk solusi semacam itu mungkin adalah situs berita tempat sebagian besar pengguna (konsumen baru) mengonsumsi informasi tetapi tidak menghasilkan informasi yang kembali ke situs tersebut. Dalam kasus seperti itu, situs tidak perlu menyimpan informasi tentang sesi pengguna saat ini. Perhatikan bahwa situs tersebut mungkin masih menggunakan cookie untuk mengidentifikasi pengguna dan menyimpan informasi tentang penggunaan situs tersebut oleh pengguna tersebut, tetapi itu mungkin masih dianggap sebagai stateless karena semua yang direkam dapat bersifat transaksional, misalnya tautan apa yang diklik pengguna, yang mungkin direkam oleh server, tetapi tidak dikelola dalam sesi pengguna.
Statefulness di server
Di server, aplikasi stateful menyimpan informasi status tentang pengguna saat ini. Pendekatan ini umumnya melibatkan penggunaan cookie untuk mengidentifikasi sistem pengguna sehingga keadaan dapat dipertahankan di server di antara permintaan. Sesi dapat diotentikasi atau tidak, tergantung pada konteks aplikasi. Aplikasi server stateful menawarkan keuntungan dari caching informasi status pengguna di server, mempercepat pencarian dan waktu respons halaman. Di sisi bawah, menyimpan informasi dalam ruang lingkup sesi mahal, dan pada skala itu menjadi sangat intensif sumber daya. Ini juga menciptakan vektor serangan potensial bagi peretas untuk mencoba dan membajak pengidentifikasi sesi dan mencuri sesi pengguna. Aplikasi server stateful juga memiliki tantangan melindungi sesi pengguna terhadap gangguan layanan yang tidak terduga, misalnya kegagalan server.
Statefulness pada klien
Menggunakan JavaScript dan teknologi browser modern seperti sessionStorage, aplikasi sekarang dapat dengan mudah menyimpan informasi status tentang sesi pengguna pada perangkat pengguna itu. Secara keseluruhan, aplikasi mungkin masih dianggap stateful, tetapi pekerjaan mempertahankan status telah dipindahkan ke klien. Pendekatan ini memiliki keuntungan besar (untuk pemelihara aplikasi Web) dibandingkan mempertahankan status pada server karena setiap pengguna, pada dasarnya, mempertahankan status mereka sendiri, dan tidak ada beban pada infrastruktur server. Pada skala web, pilihan arsitektur semacam itu memiliki dampak besar untuk biaya perangkat keras dan listrik. Harganya jutaan dolar per tahun untuk mempertahankan status di server. Pindah ke sistem yang mempertahankan status klien dapat menghemat jutaan dolar per tahun.
Token v. Cookie
Cookie bertindak sebagai pengidentifikasi untuk perangkat / browser klien. Mereka dapat digunakan untuk menyimpan segala macam hal, tetapi umumnya mereka menyimpan beberapa bentuk pengidentifikasi, seperti CFID / CFTOKEN di aplikasi CFML. Cookie dapat diatur untuk hidup di browser pengguna untuk waktu yang lama, memungkinkan untuk melakukan hal-hal seperti mempertahankan otentikasi pada aplikasi di antara sesi browser. Cookie juga dapat diatur ke memori saja sehingga mereka kedaluwarsa ketika pengguna menutup browser.
Token umumnya semacam mengidentifikasi informasi tentang pengguna yang dihasilkan di server (menggunakan enkripsi untuk mengacak informasi), diteruskan ke klien, dan dikembalikan ke server dengan permintaan berikutnya. Mereka mungkin diteruskan di header permintaan dan tanggapan, yang merupakan pola umum dalam aplikasi satu halaman. Idealnya, setiap permintaan / respons menghasilkan pembuatan token baru, sehingga token tidak dapat dicegat dan digunakan nanti oleh penyerang.
Aplikasi Halaman Tunggal dan status klien
Dengan SPA, informasi status dimuat ke browser klien dan dipertahankan di sana. Ketika keadaan berubah, misalnya Anda memposting pembaruan ke akun media sosial Anda, klien menyampaikan transaksi baru itu ke server. Dalam hal ini, server menyimpan pembaruan itu ke penyimpanan data yang persisten seperti database, dan menyampaikan informasi apa pun kembali ke klien yang perlu disinkronkan dengan server berdasarkan pembaruan (misalnya ID untuk pembaruan).
Perhatikan bahwa pola penyimpanan ini pada klien menawarkan keuntungan untuk pengalaman online / offline di mana Anda dapat terputus dari server sementara masih memiliki aplikasi yang agak dapat digunakan. Twitter adalah contoh yang bagus untuk kasus ini, di mana Anda dapat meninjau apa pun yang dimuat sisi klien dalam umpan Twitter Anda, bahkan jika Anda terputus dari aplikasi server Twitter. Pola ini juga menciptakan kompleksitas dalam sinkronisasi antara server dan klien, yang merupakan subjek tersendiri. Kompleksitas dari solusi adalah tradeoff untuk dapat mempertahankan keadaan pada klien.
Statefulness pada klien membuat aplikasi web merasa dan berperilaku lebih seperti aplikasi desktop tradisional. Tidak seperti aplikasi desktop, Anda biasanya tidak akan memiliki semua informasi akun Anda dimuat ke dalam sesi klien Anda di browser. Melakukan hal itu dalam banyak kasus akan menjadi tidak praktis dan menghasilkan pengalaman buruk. Bisakah Anda bayangkan mencoba memuat seluruh kotak Gmail ke browser? Sebagai gantinya, klien menyimpan informasi seperti apa label / folder yang Anda lihat dan di mana dalam daftar email di folder yang Anda cari. Menyeimbangkan informasi negara mana yang harus dipertahankan dan apa yang diminta sesuai kebutuhan adalah tantangan rekayasa lain dari pola ini, dan sekali lagi, ini mewakili pertukaran antara kepraktisan dan memberikan pengalaman pengguna yang baik.
Kereta belanja dan sejenisnya
Adapun spesifik seperti gerobak belanja, itu sangat tergantung pada solusinya. Keranjang belanja dapat disimpan dalam database di server, mungkin hanya disimpan dalam ruang lingkup sesi di server, atau bahkan dapat disimpan di klien. Amazon memiliki gerobak belanja persisten untuk pengguna yang masuk, dan gerobak "sementara" untuk pengguna anonim, meskipun gerobak ini persisten sampai batas tertentu.
Ketika Anda berbicara tentang sesuatu seperti Google, yang sebenarnya adalah sekelompok aplikasi berbeda yang hidup di bawah merek yang sama, mereka mungkin tidak berbagi arsitektur yang sama, dan masing-masing dibangun dengan cara yang paling memenuhi kebutuhan penggunanya. Jika Anda ingin mempelajari cara membangun situs, buka alat pengembang di browser Anda dan lihatlah. Periksa kuki, tonton lalu lintas jaringan, dan lihat cara kerjanya.
Maaf jika jawaban ini sedikit mengoceh, tetapi status adalah subjek yang kompleks.