Web oturumu “Kötü Tasarım” mı? Neden?


13

Geçen gün bir meslektaşımla tartışıyordum ve bir web uygulamasında kullanıcının oturumunu kullanmanın sadece yanlış olduğunu söyledi. Sakladığınız bilgilere bağlı olarak bunun yanlış olabileceğini, aksi halde neden bir web oturumu hizmeti Microsoft tarafından bile sağlanıyor (ASP.NET hakkında konuşuyorduk) yanıtladı.

Yine bana, MS'de bile kötü tasarım olduğunu kolayca cevaplayabileceklerini söyledi. Ve bana bunu gösteren bazı teknik belgeleri gösterebileceğini söyledi.

Ne yazık ki artık bu adamla iletişim kurma şansım yok, ama gerçekten onun bakış açısı hakkında daha fazla bilgi edinmek istiyorum. Burada bu konuda kimsenin bilgisi / bakış açısı var mı?


2
HTTP protokolü başlangıçta "durumsuz" olarak tasarlanmıştır - böylece tüm işlemler tekil ve sağlanan bilgilere dayanmaktadır. Oturumlar, bazı kullanımlarda bunu çözmenin bir yoludur. Pratik olarak, birçok modern web sitesi için, oturumlardan kaçınmanın basit bir yolunu düşünemiyorum; belki de yeterince yaratıcı değilim.
Katana314

@ Katana314 Çerezlerle veritabanı depolama. Oturumları, kullanıcıyı tanımlamak gibi çok temel bilgiler için kullanabilirsiniz, ancak birçok oturum uygulaması (özellikle birden çok kez vurduğumuz Django'da), aynı kullanıcının birden fazla isteği olduğunda daha geçici verilerle yarış koşulları oluşturabilen kusurlara sahiptir aynı anda gönderilir (AJAX çağrıları gibi)
Izkata

2
Çerezlerle veritabanı depolama, oturumunuzu bir veritabanında barındırmakla ilgilidir.
Alan Shutko

Yanıtlar:


11

"Kötü tasarım" anlamına gelmediğini sanmıyorum. Genel olarak konuşursak, bir web uygulaması mümkün olduğu kadar vatansız olmalıdır. Örneğin, sayfa görüntülemeye izin vermek için kullanıcı bilgilerini bilmeniz gerekse de, bu bilgiler istemci makineye bir çerez biçiminde kaydedilebilir ve sunucu kullanıcı bilgilerini her seferinde doğrular.

Bu ideal olurdu, ancak her zaman istemcinin çerezleri kaydedebileceğine güvenemezsiniz. Ayrıca, kullanıcının durum bilgisi olmayan bir şekilde doğrulanmasını içerir; bu, basit bir sayfa isteği için veritabanından bilgilerin sorgulanmasını içerebilir. Çoğu zaman bu tür bilgileri oturumda kaydetmek daha kolaydır.

Ancak, Rubicon'u geçtikten sonra, birçok programcı sadece oturumdaki kimlik doğrulama bilgilerini değil, diğer birçok şeyi de kaydetme eğilimindedir. Bu bir anti-desen ve web uygulamanızı ilk etapta kaçınılması gereken tam olarak duruma bağlı hale getirme eğilimindedir.

Bazı programcılar, başka türlü bağımlılıkların karışıklığını gidermek için Spring (Java kullanıyorsanız) gibi teknolojiye bağlıydı, ancak bunun sadece onları ortadan kaldırmak yerine bağımlılıklar oluşturmayı kolaylaştırdığını iddia ediyorum. Bu teknolojiler, anti-deseninizi daha az problem haline getirmemeli, gelişiminize yardımcı olmalıdır.

Bu nedenle, iyi bir kural, vatansız yazabiliyorsanız, muhtemelen bunu yapmak için daha iyi bir fikirdir veya bu tuzağa düşme riskiniz vardır. Açıkçası, bunun gerekli olduğu durumlarla karşılaşacaksınız, ancak genel olarak konuşursak, yalnızca aksi takdirde yeniden elde edilmesi zor olacak bilgileri kaydetmelisiniz.


1
but you can't always count on the client being able to save cookiesAFAIK, oturumlara da güvenemezsiniz. Hangi oturumun hangi kullanıcıya ait olduğunu tanımlamak için çerezler kullanılmıyor mu, yoksa başka yöntemler var mı ve bu en yaygın olanı mı?
Haziran'da Izkata

Oturum bilgileri normalde her sunucu / istemci bağlantısı için sunucuya kaydedilir ve bu, çerezleri etkinleştiren kullanıcılara güvenemeyen büyük web siteleri için popüler bir trend haline geldi. Adı geçen bilgilerin istemci PC'ye kaydedilmesini zorlayan seçenekler (ve / veya js kütüphaneleri) vardır (son zamanlarda çok popüler hale gelmiştir), ancak HTML 5 olmadan çerezler bunu başarmanın tek yoludur. Bildiğim kadarıyla, bunu yapmanın başka yolu yok.
Neil

8

İki farklı konuyu karıştırdığınızı düşünüyorum: 1) oturumlar ve 2) asp.net web formlarının sayfa modeli

Bir kullanıcının kimlik doğrulaması için bir web oturumu gereklidir . İdeal olarak bir oturum sadece bu amaç için kullanılmalıdır. Bir oturumda kullanıcı verilerini depolamamalısınız (ister sunucuda, ister bir çerezde olsun, ister asp.net/webforms bunu yapıyorsa: sayfanın içinde). Hiç kimse bir web oturumunun kötü olduğunu söylememeli, daha ziyade kullanıcı verilerini depolamalıdırbir oturumda kötü bir uygulamadır. Kullanıcı verilerinin sunucuda saklanmamasının nedenleri, global değişkenlerden kaçınmak için aynı nedenleri içerir. Kullanıcı verilerinin çerezlerde veya sayfada depolanması güvenlik sorunlarına yol açabilir. Asp.net sayfa modelini kullanmak, web'in durumsuz doğasına da bağlı değildir. Web formlarının neden kötü bir tasarım olduğu hakkında daha fazla bilgi edinmek için bir arama yapabilirsiniz. Oturumlar ise web uygulamalarının gerekli bir parçasıdır.


"Öte yandan oturumlar web uygulamalarının gerekli bir parçasıdır." Hayır.
masterxilo

6

Denetimler ve oturum durumunun bir sayfada depolanması aslında bir saldırıdır. MS örneğidir - winform ortamlarında olabildiğince sayfa tasarlayabileceğiniz bir geliştirme ortamı sağlamak istedikleri için gereklidir.

MS, protokolün gerçekte ne olması gerektiğine bir daha dönüşü olan vatansız olan MVC mimarisine (en son sürüm - MVC 4) doğru ilerlemiştir.

Depolama durumunun hala kullanışlı olduğu durumlar vardır, ancak bunun kuraldan ziyade istisna olduğu anlaşılmalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.