Apakah sesi web "Desain Buruk"? Mengapa?


13

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?


2
Protokol HTTP pada awalnya dirancang untuk menjadi "stateless" - sehingga semua transaksi adalah tunggal, dan didasarkan pada informasi yang disediakan. Sesi adalah cara mengatasi hal itu dalam beberapa kegunaan. Namun, secara praktis, untuk banyak situs web modern, saya tidak bisa memikirkan cara sederhana untuk menghindari sesi; mungkin saya tidak cukup kreatif.
Katana314

@ Katana314 Penyimpanan basis data dengan cookie. Anda dapat menggunakan sesi untuk informasi yang sangat mendasar seperti mengidentifikasi pengguna, tetapi banyak implementasi sesi (terutama di Django, yang telah kami tekan berkali-kali) memiliki kekurangan yang dapat membuat kondisi balapan dengan data yang lebih sementara setiap kali beberapa permintaan oleh pengguna yang sama dikirim sekaligus (seperti dengan panggilan AJAX)
Izkata

2
Penyimpanan basis data dengan cookie hanyalah masalah menempatkan sesi Anda dalam basis data.
Alan Shutko

Jawaban:


11

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.


1
but you can't always count on the client being able to save cookieskemudian 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?
Izkata

Informasi sesi biasanya disimpan di server untuk setiap koneksi server / klien, dan ini menjadi tren populer untuk situs web besar yang tidak dapat bergantung pada pengguna yang mengaktifkan cookie. Ada beberapa opsi (dan / atau pustaka js) yang memaksa penghematan informasi tersebut pada PC klien (yang telah menjadi sangat populer akhir-akhir ini), tetapi tanpa HTML 5, cookie adalah satu-satunya cara untuk mencapai hal ini. Sepengetahuan saya, tidak ada cara lain untuk melakukan ini.
Neil

8

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.


"Sesi di sisi lain adalah bagian penting dari aplikasi web." Tidak.
masterxilo

6

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.