2010-01-18 17 views
7

Bana iletilen bir web sitesinde (C# ile ASP.NET'te geliştirilmiştir) çalışıyorum. Ben site üzerinden çalışıyorum, ben sitenin bir kısmı onda bu kod türü olan dikkat edin: Bu, tüm tipik (Page_Load yönteminde) sitenin kod arkasında yapılırDenetimleri Web Güvencesi Biçimi Olarak Gizleme, Daha İyi İçin Öneriler?

EmailLabel.Visible = false; 
WhateverButton.Visible = false; 
AnotherControl.Visible = false; 
... 

. Esasen, oturum açmamış bir kullanıcının bileşenlere erişmesini engellemek için uygulamaya konulmuştur (site kuralı, oturum açmamış bir kullanıcının oturum açana kadar sitenin herhangi bir bölümünü görememesidir). 'un üstündeki yol, çalışıyor ... ancak kullanıcının giriş yapıp yapmadığını kontrol etmenin ve tüm bu bileşenler için doğru duruma geçmesinin gerekmesi oldukça pahalı görünüyor.

Bu soruna yaklaşımın farklı bir yolu var mı? Sadece onu düşünerek/araştırma yaparken, belki de bir kullanıcı giriş yapmamışsa, ana sayfaya bir yönlendirme yapabilmem için bir yol olacağını düşünmüştüm. Daha da ileride, bunu yapmak için bir temel sayfayı genişletebilirim. Ana sayfayı genişleten sayfa. Ancak, bu alandaki bilgim sınırlıdır, bu yüzden önerim çalışmayabilir.

SO önerebilir? Daha iyi bir şey var mı? Orada yeterince iyi olan nedir?

cevap

2

Bunu işimde çok yapıyoruz.

Bunu gerçekleştirme biçimimiz, System.Web.UI.Page öğesinden devralınan bir BasePage sınıfı oluşturmaktır. Sonra OnInit'i geçersiz kılar, base.OnInit'i çağırır ve oturum açmış bir kullanıcıyı kontrol etmek için kod ekleyin. kullanıcı oturum değilse, bir giriş sayfasına onları yönlendirme (BasePage devralan olmaz.)

Sonra korunması gereken her sayfada, sadece BasePage devralmak için sayfayı değiştirin.

Womp'un yukarıda yazdığı gibi, Response.End(); Yönlendirme işleminden sonra, sayfanın geri kalanını işlemeye devam etmek bile çok daha hızlıdır!

Bu yardımcı olur umarım.

+0

Bu yaklaşım çoğu durum için kesinlikle tavsiye edilirken, daha hızlı olması imkansız. Bazı boole değişkenleri, tarayıcıya 301 gidiş dönüş yapmanın ötesinde bir yere nasıl yerleştirilebilir? Yüzlerce milisaniye ağ gecikme süresi ve birden çok tarayıcı isteği ile ilgilenen sunucudan işlemci süresinin nanosaniyesinde konuşuyorsunuz. Ve Response.End() kendi ek yükünü üreten bir ThreadAbortException atar. – womp

+0

Sadece açıklığa kavuşturmak için - sadece * kimlik doğrulaması gerektiren sayfaları korumak kesinlikle bu şekilde yapılmalıdır. OP'nin bunu gerektirip gerektirmediği konusunda emin değilim. – womp

+1

Bunun daha hızlı olmasının nedeni, OnInit'ten sonraki Sayfa Döngüsü Yöntemlerinden hiçbirinin bu şekilde çağrılmamasıdır. Çok fazla CPU zamanı tasarrufu. Tüm niyet ve amaçlar için, fazladan bir gidiş geliş ve kullanıcıyla giriş yapmadığı zaman, kullanıcı giriş yapmamış olması durumunda beklenmektedir. – TJMonk15

1

Bu kontroller bir dizi Görünür bayrakları ayarlamak için daha bir yönlendirme sorunu daha pahalı büyüklükte birçok, birçok emir olurdu.

Sayfanız sonra da muhtemelen sayfanın ikinci versiyonunu inşa ederek, anonim erişim başka bir şekilde izin vermek gerektirecektir yönlendirme, hem anonim erişim sağlar ve erişim oturum edin.

Gider sorusu gerçekten sadece bir kenara bırakılsa da, muhtemelen hiç önemli değil. Ana sorunuzu cevaplamak için, uygulamanızın mimarisi hakkında daha fazla bilgi sahibi olmadan, bu iki şeyi de istenmeyen olarak kabul ediyorum. Kontrollerin sadece Visible = false olarak ayarlanmasının avantajları, görünmez kontroller için çıktı akışına hiçbir şey verilmemesidir, ancak yine de sunucu istekleriyle etkileşime girebilirler.

Sayfanızın gereksinimleri hakkında daha fazla bilgi sahibi olmadan alternatifleri önermek zordur. Bir başkasının da belirttiği gibi, görünmez kontroller anonim kullanıcılara katılmıyorsa, LoginView ihtiyaçlarınızı karşılayabilir.

+0

İyi yanıt (+1), ancak bir yönlendirmenin neden "çok fazla büyüklükteki siparişler daha pahalı" olduğunu merak ediyorum. Özellikle, giriş yapamayan bir kullanıcının ana sayfayı (örneğin, adresi rastgele bir sayfaya ezberlemedikçe) "çıkması" ihtimali çok azdır. Yani, bu sık sık olması gereken bir şey olmamalı. – JasCav

+0

Bazı görünür bayrakların ayarlanmasının birkaç işlemci döngüsü olduğunu düşünürken, bir yönlendirme oluşturmak, tüm ağ gecikmesi, yeni bir isteği işlemek için sunucu kaynakları ile birlikte tarayıcıya gidiş gelişi gerektirir ve ele alınacak sayfa yaşam döngüsünü tamamlar. – womp

İlgili konular