在ASP.NET Intranet MVC应用程序中维护经过身份验证的用户详细信息的最佳做法是什么

时间:2013-08-21 06:15:29

标签: asp.net-mvc asp.net-mvc-3

我正在开发一个Intranet.NET MVC应用程序。我需要存储与每个经过身份验证的用户关联的位置,ID号等用户详细信息。

在.NET Webform应用程序中,我们用于在会话中保存登录用户的详细信息。但.NET MVC应用程序的最佳实践是什么?

3 个答案:

答案 0 :(得分:1)

您仍然可以在MVC中使用会话状态,但这是不可取的。作为模式的MVC尊重HTTP的无状态。

一种替代方法是使用仅在内存中存储信息的Cache。这是一个包含更多信息的问题:Why would ASP.NET MVC use session state?

还有一个:Is it a good practice to avoid using Session State in ASP.NET MVC? If yes, why and how?

答案 1 :(得分:1)

有一些方法可以为这只猫提供皮肤,但我认为将个人资料信息附加到用户手中会是最优雅的。

您需要一个能够保留用户个人资料数据的个人资料提供程序。您可以使用SqlProfileProvider for SQL Server,但我建议您查看Microsoft ASP.NET Universal Providers ref:http://www.nuget.org/packages/Microsoft.AspNet.Providers

Scott Hanselman的一些无耻的复制和粘贴如下。假设您要跟踪用户的生日:

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

然后你在web.config中设置它:

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

最后,您可以使用以下命令拉入当前用户的自定义配置文件:

var customProfile = HttpContext.Profile as MyCustomProfile;

DateTime? birthday = customProfile.Birthdate;

您必须设置数据存储,但这主要是需要完成的工作。您可以在Scott Hanselman的博客中找到完整的细节:http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx

答案 2 :(得分:0)

我认为“在工作中使用正确的工具”的格言适用于此。只要正确使用,我认为在会话中存储数据没有任何问题。

MVC为短期状态(ModelState和TempData)提供了其他机制。如果那些满足您的需求,请使用它们。 TempData无论如何都在幕后使用SessionState(如this问题所示)。如果您真正需要的是数据在用户会话期间保持状态而不再存在,则SessionSate是执行该任务的好工具。

使用缓存也很好,但您需要管理缓存的过期/失效。我发现缓存对于非会话或用户相关的事物最有用,无论它们是更短还是更长寿。