在Asp.NET(MVC)中使用Session和Cache进行状态管理

时间:2012-04-04 09:34:03

标签: c# asp.net asp.net-mvc

使用ASP.NET MVC3创建Web应用程序,基本框架包括NHibernate(Fluent),Ninject,Razor,Automapper,Jquery,Rhino-Security。

需要决定州管理战略(会话和缓存级别)。 我听说过以下缓存类型,

  1. 输出缓存
  2. 甜甜圈(洞)缓存
  3. 数据缓存
  4. 考虑到一般情况,我想了解在请求期间使用的状态管理策略,

    LOGIN

    1. 用户访问网站,仍然未经身份验证,因此通过FormsAuth模块重定向到登录页面(问题 - 由于登录页面不是用户特定的,绝对是输出缓存的候选者。但是View是纯HTML刷新的逐字通过MVC,使用缓存的任何好处
    2. PAGE ACCESS

      1. 当我使用Rhino Security时,导航取决于分配给个人用户的权限。每个用户 MAY HAVE 分配 BUT 的特定权限,大多数用户将拥有分配给该用户所属的UseGroup的权限。导航创建是一个两步过程 - 为用户和Gernerating Navigation UI获取权限集,所以这里是我的两个Q(问题1 - 每个页面访问需要当前用户的权限以进行操作授权以及导航创建,所以在哪里存储 - 会话?问题2 - 为每个用户创建导航 MAY 以便首次访问并存储在会话中,但我们是意识到它对于UserGroup中的每个用户都是相同的,除非给定特定的权限。因此,我们可以为某组权限创建Hash,然后将导航保存到数据缓存 OR 使用VarByCustom启用输出缓存负责创建导航UI的子操作)
      2. 我觉得我太啰嗦了。事实上我确实有更多的问题,但是让我先看看smbdy是否真的很难在这里阅读这么多废话

1 个答案:

答案 0 :(得分:0)

关于用户权限,假设每个用户组都相同,我会将它们存储在Cache中,如下所示:

if (System.Web.HttpContext.Current.Cache["UserGroup_1_Permissions"] == null)
{
    _Permissions = DAL.getPermissions("UserGroup1") as List<Permissions>;
    System.Web.HttpContext.Current.Cache["UserGroup_1_Permissions"] = _Permissions;
}
else
{
    _Permissions = System.Web.HttpContext.Current.Cache["UserGroup_1_Permissions"] as List<Permissions>;
}

这样,您只能在第一次从DB中检索它们,因为它将存储在HttpContext.Current.Cache中。