2013-08-21 26 views
5

kimliği doğrulanmış kullanıcı ayrıntılarını sürdürmenin en iyi yolu nedir? Bir Intranet.NET MVC uygulaması geliştiriyorum. Her kimliği doğrulanmış kullanıcıyla ilişkili konum, Kimlik Numarası vb. Gibi kullanıcı ayrıntılarını kaydetmem gerekiyor. Bir ASP.NET Intranet MVC uygulamasında

NET Web Formu uygulamalarda biz oturumda kullanıcının ayrıntılarda açmış kaydetmek için kullanılır. Peki, .NET MVC uygulamasında en iyi uygulama hangisidir?

+1

** [Gönder Bu yazı. Bunu faydalı bulabilir misiniz?] (Http://stackoverflow.com/a/17199709/2015869) ** –

+0

Girişiniz için teşekkür ederiz. Ama bir yerde "TempData'nın çok kısa ömürlü bir örnek olması gerekiyordu ve sadece geçerli ve sonraki istekler sırasında kullanmalısınız." Verileri belirli bir kullanıcı oturumu boyunca sürdürmenin herhangi bir yolu var mı? –

+0

Windows kimlik doğrulaması veya form kimlik doğrulaması kullanıyor musunuz? Veritabanınız var mı? –

cevap

1

bu kediyi için birkaç yolu vardır, ama kullanıcıya profil bilgilerini eklemek en olacağını iddia ediyorum zarif.

Sen kullanıcının profil verileri kalıcı bir profili Sağlayıcı gerekir. SQL Server için SqlProfileProvider'ı kullanabilirsiniz, ancak Microsoft ASP.NET Evrensel Sağlayıcıları'na bakmanızı öneririm: http://www.nuget.org/packages/Microsoft.AspNet.Providers

Scott Hanselman'ın bazı utanmaz kopyaları ve yapıştırmaları aşağıdadır.

<profile inherits="MyApp.Models.MyCustomProfile" defaultprovider="DefaultProfileProvider"></profile> 

Son olarak, geçerli kullanıcının özel profilinde indirebiliriz:

public class MyCustomProfile : ProfileBase 
{ 
    public DateTime? Birthdate { 
     get { return this["Birthdate"] as DateTime?; } 
     set { this["Birthdate"] = value; } 
    } 
} 

Sonra web.config kurmak istiyorum: Diyelim ki bir kullanıcının doğum izlemek istediğiniz varsayalım ile:

var customProfile = HttpContext.Profile as MyCustomProfile; 

DateTime? birthday = customProfile.Birthdate; 

Veri deponuzu kurmanız gerekir, ancak çoğunlukla yapılması gerekenler budur. Scott Hanselman'ın blogunun tamamını bulabilirsin: http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx

0

"İş için doğru aracı kullan" ın atasözü burada geçerli. Doğru şekilde kullanıldığı sürece verileri depoda saklamakla ilgili yanlış bir şey göremiyorum.

MVC başka mekanizmalar kısa süreli durum için (ModelState ve TempData) içerir. Bunlar ihtiyaçlarınızı karşılıyorsa, onları kullanın. TempData, SessionState'i sahnelerin arkasında kullanıyor (this soru gösteriliyor). Gerçekten ihtiyacınız olan şey, bir kullanıcı oturumu süresince ve artık süresiz olarak kalması gereken verilerse, SessionSate bu görev için iyi bir araçtır.

kullanma önbelleğe da iyidir, ama sen önbellek son kullanma/invalidation yönetmesi gerekir. Daha kısa veya daha uzun ömürlü olup olmadıklarına bakılmaksızın oturum veya kullanıcı bağımlı olmayan şeyler için en kullanışlı önbelleğe alma özelliğini buluyorum.