如何在请求之间将用户信息存储在MVC中

时间:2010-12-17 23:12:42

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

我有一个使用Windows身份验证的MVC2站点。

当用户请求页面时,我从数据库中提取一些用户信息。我检索的类是Person类。

当用户进入网站时如何从数据库中获取此信息,并在所有后续页面请求中不接触数据库的情况下选择相同的类?

我必须承认,在ASP.net MVC中进行会话处理时我很丢失。

4 个答案:

答案 0 :(得分:1)

您可以将此类信息存储在HttpContextBase.Session

答案 1 :(得分:0)

一个选项是在第一次点击时从数据库中检索Person对象并将其存储在System.Web.HttpContext.Current.Cache中,这将允许极快的访​​问,并且您的Person数据将临时存储在Web服务器的RAM中。 / p>

但要小心:如果以这种方式存储大量用户数据,可能会占用大量内存。然而,如果你只需要缓存几千左右,这将是完全正常的。显然,这取决于您希望使用应用程序的用户数量。

您可以这样添加:

private void CachePersonData (Person data, string storageKey)
{
    if (HttpContext.Current.Cache[storageKey] == null)
    {
        HttpContext.Current.Cache.Add(storageKey, 
            data, 
            null, 
            Cache.NoAbsoluteExpiration, 
            TimeSpan.FromDays(1), 
            CacheItemPriority.High, 
            null);
    }
}

...并像这样检索:

// Grab data from the cache 
Person p = HttpContext.Current.Cache[storageKey];

不要忘记从缓存返回的对象可能为null,因此您应检查此内容并根据需要从数据库加载(然后缓存)。

答案 2 :(得分:0)

HttpContext.Current.Session[key];

答案 3 :(得分:0)

首先,如果您使用的是负载平衡环境,我建议您不要将其存储在数据库中而尝试使用任何解决方案,因为它最终会失败。

如果您不在负载平衡环境中,可以使用TempData存储对象,然后在后续请求中检索它。