我有一个使用Windows身份验证的MVC2站点。
当用户请求页面时,我从数据库中提取一些用户信息。我检索的类是Person类。
当用户进入网站时如何从数据库中获取此信息,并在所有后续页面请求中不接触数据库的情况下选择相同的类?
我必须承认,在ASP.net MVC中进行会话处理时我很丢失。
答案 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
存储对象,然后在后续请求中检索它。