Suatu hari saya sedang berdiskusi dengan seorang kolega dan dia keluar mengatakan bahwa menggunakan sesi pengguna dalam aplikasi web itu salah. Saya menjawab bahwa itu bisa salah tergantung pada informasi yang Anda simpan, jika tidak mengapa layanan sesi web disediakan oleh Microsoft (kami berbicara tentang ASP.NET).
Dia menjawab kepada saya, sekali lagi, bahwa bahkan di MS mereka dapat dengan mudah menjawab bahwa itu adalah desain yang buruk. Dan dia bisa menunjukkan kepada saya beberapa kertas putih yang menunjukkan hal itu.
Sayangnya saya tidak memiliki kesempatan untuk menghubungi orang ini lagi, tetapi saya benar-benar ingin memahami lebih banyak tentang sudut pandangnya. Adakah yang punya informasi / sudut pandang tentang itu di sini?
web-applications
abx78
sumber
sumber
Jawaban:
Saya tidak berpikir dia berarti "desain buruk" seperti "praktek buruk." Secara umum, aplikasi web harus tanpa kewarganegaraan mungkin. Meskipun, misalnya, Anda mungkin perlu mengetahui informasi pengguna untuk mengotorisasi tampilan halaman, informasi itu dapat disimpan pada mesin klien dalam bentuk cookie dan server hanya memvalidasi informasi pengguna setiap waktu.
Itu akan ideal, tetapi Anda tidak selalu dapat mengandalkan klien untuk dapat menyimpan cookie. Selain itu, ini melibatkan memvalidasi pengguna dalam mode tanpa kewarganegaraan, yang berpotensi melibatkan permintaan informasi dari database untuk permintaan halaman sederhana. Sering kali lebih mudah menyimpan informasi seperti itu di sesi.
Namun, begitu Anda telah melewati Rubicon, banyak programmer yang tergoda untuk tidak hanya menyimpan informasi otentikasi dalam sesi tetapi banyak hal lainnya juga. Ini adalah anti-pola dan cenderung membuat aplikasi web Anda sangat bergantung pada keadaan, yang memang seharusnya dihindari.
Beberapa programmer akan bergantung pada teknologi seperti Spring (jika Anda menggunakan Java) untuk menguraikan apa yang seharusnya menjadi kekacauan ketergantungan, tapi saya berpendapat bahwa itu hanya membuatnya lebih mudah untuk membuat dependensi daripada menghilangkannya. Teknologi seperti itu seharusnya membantu pengembangan Anda, tidak membuat anti-pola Anda kurang menjadi masalah.
Oleh karena itu, aturan praktis yang baik adalah bahwa jika Anda dapat menulisnya tanpa kewarganegaraan, mungkin itu adalah ide yang lebih baik untuk melakukannya atau Anda berisiko jatuh ke dalam perangkap ini. Jelas Anda akan mengalami situasi di mana ini diperlukan, tetapi secara umum, Anda hanya harus menyimpan informasi yang jika tidak akan sulit diperoleh kembali.
sumber
but you can't always count on the client being able to save cookies
kemudian AFAIK, Anda juga tidak bisa mengandalkan sesi. Bukankah cookie digunakan untuk mengidentifikasi sesi mana yang menjadi milik pengguna yang mana, atau adakah metode lain dan itu yang paling umum?Saya pikir Anda membingungkan dua topik yang berbeda: 1) sesi dan 2) model halaman dari formulir web asp.net
Sesi web diperlukan untuk otentikasi pengguna. Idealnya sesi hanya digunakan untuk tujuan ini. Anda tidak boleh menyimpan data pengguna dalam suatu sesi (apakah itu di server, dalam cookie, atau seperti asp.net/webforms melakukannya: di dalam halaman itu sendiri). Tidak seorang pun boleh mengatakan bahwa sesi web itu buruk, melainkan menyimpan data penggunadalam suatu sesi adalah praktik yang buruk. Alasan untuk tidak menyimpan data pengguna di server termasuk alasan yang sama untuk menghindari variabel global. Menyimpan data pengguna dalam cookie atau di halaman dapat memperkenalkan masalah keamanan. Menggunakan model halaman dari asp.net juga tidak mematuhi sifat kewarganegaraan web. Anda dapat melakukan pencarian untuk mengetahui lebih lanjut tentang mengapa formulir web adalah desain yang buruk. Sesi di sisi lain adalah bagian penting dari aplikasi web.
sumber
Kontrol dan penyimpanan status sesi pada halaman pada dasarnya adalah peretasan. Apakah kasus MS - yang diperlukan karena mereka ingin dapat memberikan lingkungan pengembangan di mana Anda dapat merancang halaman sebanyak yang Anda bisa di lingkungan winform.
MS sendiri telah bergerak menuju arsitektur MVC (versi terbaru - MVC 4) yang lebih merupakan kembalinya protokol yang seharusnya - stateless.
Ada situasi di mana keadaan penyimpanan masih berguna tetapi harus dipahami bahwa ini adalah pengecualian daripada aturan.
sumber