C# Asp.NET(MVC)中会话和缓存的状态管理

C# Asp.NET(MVC)中会话和缓存的状态管理,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,使用ASP.NETMVC3创建Web应用程序,基本框架包括NHibernate(Fluent)、Ninject、Razor、Automapper、Jquery和Rhino Security 需要决定状态管理策略(会话和缓存级别)。 我听说过以下缓存类型 输出缓存 甜甜圈(洞)缓存 数据缓存 考虑到一般情况,我想了解在请求期间使用的状态管理策略 登录 用户访问站点时,仍然未经验证,因此通过FormsAuth模块重新提交到登录页面(问题-由于登录页面不是特定于用户的,因此肯定是输出缓存的候选。但是视

使用ASP.NETMVC3创建Web应用程序,基本框架包括NHibernate(Fluent)、Ninject、Razor、Automapper、Jquery和Rhino Security

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

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

    登录

  • 用户访问站点时,仍然未经验证,因此通过FormsAuth模块重新提交到登录页面(问题-由于登录页面不是特定于用户的,因此肯定是输出缓存的候选。但是视图是纯HTML的,由MVC逐字刷新,所以使用缓存有任何好处)
  • 页面访问

  • 由于我使用的是Rhino安全性,导航取决于分配给每个用户的权限。每个用户可能拥有分配给该用户所属的UseGroup的特定权限,但大多数用户将拥有分配给该用户所属UseGroup的权限。导航创建是一个分两步的过程——获取用户权限集和生成导航UI,下面是我的两个Q(问题1-每个页面访问时都需要当前用户的权限才能进行操作授权和导航操作,因此在何处存储它-会话?问题2-导航也可以为每个用户创建,以便首次访问并存储在会话中,但我们知道这是相同的对于用户组中的每个用户,除非指定了特定的用户。因此,我们可以为特定权限集创建哈希,然后将导航保存到数据缓存使用VarByCustom启用输出缓存(负责创建导航UI的子操作)

  • 我知道我说得太详细了。事实上,我还有更多的问题,但首先让我看看smbdy是否真的费心在这里读这么多关于用户权限的废话

    ,因为每个用户组的权限都是相同的,我会像这样将它们存储在缓存中:

    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>;
    }
    
    if(System.Web.HttpContext.Current.Cache[“UserGroup\u 1\u Permissions”]==null)
    {
    _Permissions=DAL.getPermissions(“UserGroup1”)作为列表;
    System.Web.HttpContext.Current.Cache[“UserGroup\u 1\u Permissions”]=\u Permissions;
    }
    其他的
    {
    _权限=System.Web.HttpContext.Current.Cache[“用户组\u 1\u权限”]作为列表;
    }
    

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

    嘿,WiseGuys/老兵/专家-帮帮我!这么来的世界是什么;-)很难看出您的实际问题是什么?通常(虽然不总是),所以问题包含一些代码,一些您尝试过或发现但不起作用的东西。此外,如果你以一种“自然”的方式提出一个问题,从而得出一个明确的答案,这也会有所帮助。首先,你能试着在最后用一个问句来表达你需要回答的问题吗?Jeroen,我的情况是这样的,问题更明确地用粗体突出显示