2010-07-07 29 views
6

Forms kimlik doğrulaması var ve HttpContext.Current.User ve Thread.CurrentPrincipal içinde depolanacak özel bir nesneye ihtiyacım var.PostAuthenticateRequest birkaç kez yangın yapar

Bunu almak için PostAuthenticateRequest olayını dinlerim, daha sonra HttpContext.Current.User ve Thread.CurrentPrincipal içinde depolanması gereken tüm kullanıcı verilerini DB'den okudum, sonra özel IPrincipal ve IIdentity nesnelerini örneklendirip atadım Onları yukarıdaki yerlere.

sorun nedense PostAuthenticateRequest

Bunu nasıl ele almalıdır .. tek bir istek .. Bu gereksiz DB Acıtıyor performansını gidiş-dönüş yol için birkaç kez patlar mı? (ASP.NET MVC 2)

Teşekkürler.

cevap

5

Tek bir istek için birkaç kez çalıştığından emin misiniz? Unutmayın, sayfanızda başvurulan resim ve stil sayfaları gibi her kaynak, ayrı bir istek olarak ele alındıklarından bu etkinliği tetikler. Özel nesneleri kısaca önbelleğe almanız ve varoluşlarını önbellekte denetlemeniz ve yalnızca DB'ye gitmemeniz önerilir.

Bu istekler genellikle birbirine çok yakın olduğu için önbelleğe biraz kilitleme uygulamalısınız.

+0

Oh, evet! Kaynak ve vb şey aklımı kaymış! Tazeleme için teşekkürler! Önbelleğe alma işlemini zaten düşündüm. Ama aynı zamanda imaları ile de gider. Örneğin, DB'den okudum ve Müdürün kullanıcı izinlerinde depoladım. Yönetici, bir kullanıcının iznini değiştirmeye karar vermesi durumunda önbellekte bulundurmak çok iyi bir fikir değildir. Önbelleğe alınan kullanıcının izinleri, kullanıcı oturumu kapatan/oturum açana kadar güncellenmez. Fikrinizi "kısa" önbellekleme ile denemeniz gerekir. Bu tasarı sığması gerektiği gibi görünüyor .. Çok teşekkürler! – Ant

+0

Geçerli kullanıcının önbelleğini Page_Init üzerinde güncelleyebilirsiniz. Ardından, DB'den sayfa isteği başına yalnızca bir kez yeniden yüklenecekti. Bu, sayfa henüz oluşturulmadığından, diğer geri sayımlardan herhangi biri talep edilmeden önce her zaman gerçekleşecektir. –

1

Komut dosyalarınız, css ve resim dizinlerinden kimlik doğrulamasını kaldırmak için web.config dosyasındaki etiketi kullanın. Örneğin,

<system.web> 
... 
</system.web> 

<location path="~/Scripts"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
</location> 
+2

Bu etkinliğin, yeniden gönderilen veya olmayan sayfaya erişip erişmemesine bakılmaksızın, her istekte tetiklenmesine yardımcı olmaz. – jlp

İlgili konular