asp.net-mvc – 在请求之间保持/缓存数据 – 常用方法
|
我正在开发一个 Asp.net(MVC,但这并不重要)应用程序.我有一个自定义IHttpModule负责PostAuthenticateRequest更改用户主体和&身份. 我在用户登录时将UserID和UserName存储在身份验证cookie中.我有一个IUser(由DAO和Business Objects层实现,每个都有自己的额外成员),我需要遍布业务服务类.当用户想要任何东西时,我必须提供IUser对象实例(通常来自Business Objects层),因此从auth票证中提供ID是不够的. 所以我在考虑如何以及在哪里最好坚持登录用户的IUser数据? >我不想每次都从DB中获取它(基于身份验证票据的UserID数据) 我看到的选择: >缓存 似乎使事情复杂化的过程是: >用户登录时,将从数据库中提取用户数据,并以某种方式保留用于以后的请求 我不希望所有这些都由HttpModule自动处理(如果可能的话),以消除开发人员忘记重置这些事情的错误. 我也不想要的是写/读一些硬编码变量/键并在应用程序的其他部分操作它们.这只会出现技术债务. 问题 >你会建议什么? 解决方法根据您的要求,我认为最好的解决方案是从cookie中检索ID并使用它来索引Http Cache(HttpContext.Current.Cache).如果要维护用户访问它的方式,请将Cache包装在“UserCache”对象中.该对象可以由HttpModule构造并在缓存本身内存储为(等待它……)单例,或者更好的是,只需在从http缓存中提取时构造.这取决于您需要访问它的位置以及HttpContext.Current.Cache是否可直接使用.懒惰的实现如下. 同样,这是为了清楚,而不是我实际实现它的方式. public class UserCache
{
public IUser GetUser(object userKey)
{
return HttpContext.Current.Cache[userKey];
}
public void AddUser(object userKey,IUser user)
{
/* this could pull the key from the user object as well. */
HttpContext.Current.Cache.Add(/* add the object with key and a sliding expiration that is slightly greater than session timeout */);
}
public void ExpireUser(object userKey)
{
HttpContext.Current.Cache.Remove(userKey);
}
/* If you don't want to do SQL cache dependency */
public void UpdateUser(object userKey,IUser user)
{
HttpContext.Current.Cache.Insert(/* ... */);
}
}
使用默认的缓存机制(或者更好的是DI提供的缓存机制,因此您不依赖于实现),您可以设置过期以自动从缓存中删除用户,如注释中所述.您可以将缓存设置为依赖于SQL Server更新以及处理更新,或者将其作为服务的一部分手动更新以保存更改. 有关默认缓存的更多信息可用于here.有关cache dependencies的更多信息,请参见here. 在HttpModule本身,我想你可以在EndRequest事件中做一些魔术来查看请求是否经过身份验证,然后根据cookie记录用户,但我不确定这是否会起作用,因为我从未尝试过它.您可能希望在1.1天内查看MSDN上的this article,并查看它是否解决了您尝试解决的一些问题. 至于SO架构以及它们是如何做到的,我想他们会在需要时加载它,因为它们始终将大部分数据库保存在RAM中(http://highscalability.com/stack-overflow-architecture). (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – Asp.Net MVC中的管理区域
- asp.net-mvc – ASP.NET MVC:调用存储过程的最佳方式
- asp.net-mvc-4 – MVC 4 RC – Aspnet_regsql.exe
- asp.net-mvc – Razor查看引擎在VB.NET中的怪癖
- asp.net – 如何在隐藏字段(TextBox)上触发RequiredFieldVa
- ASP.Net MVC与ASP.Net表格
- asp.net – 无法在UpdatePanel中下载文件
- asp-classic – 从Classic ASP执行存储过程
- asp.net – MapRoute和MapPageRoute有什么区别?
- asp.net – Autofac懒惰属性注入
- asp-classic – 从用户检测空/空输入
- dependency-injection – 从ILogger访问当前的Ht
- asp.net-mvc – asp.net mvc 4应用程序的入口点是
- asp.net-mvc – ASP MVC3 – 如何从数据库加载页
- asp.net – ‘WebForm_DoPostBackWithOptions’在
- asp.net – 如何防止CPU占用100%,因为iis中的工
- ASP.NET应用程序配置IIS后,会出现错误
- asp.net-mvc – 如何使用ASP.NET MVC ApiControl
- asp.net媒体保护
- asp.net-mvc-3 – MVC3:如何在HtmlHelper扩展中
