【问题标题】:State management with Session and Cache in Asp.NET (MVC)在 Asp.NET (MVC) 中使用会话和缓存进行状态管理
【发布时间】:2012-04-05 04:12:42
【问题描述】:

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

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

  1. 输出缓存
  2. 甜甜圈(孔)缓存
  3. 数据缓存

考虑到一般情况,我想了解在请求期间使用的状态管理策略,

登录

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

页面访问

  1. 当我使用 Rhino Security 时,导航取决于分配给单个用户的权限。每个用户可能拥有分配特定权限大多数用户将拥有分配给该用户所属的 UseGroup 的权限。导航创建是一个两步过程 - 为用户获取权限集和生成导航 UI,所以这是我的两个 Q(QUESTION 1 - 在每个页面访问时都需要当前用户的权限以进行操作授权以及导航创建,那么将其存储在哪里 - 会话?问题 2 - 导航也可能为每个用户创建第一次访问并存储在会话中,但我们是请注意,除非给定特定用户,否则用户组中的每个用户都是相同的。因此,我们可以为特定权限集创建哈希,然后将导航保存到数据缓存使用 VarByCustom 启用输出缓存负责创建导航 UI 的子操作)

我知道我太冗长了。事实上,我确实有更多问题,但让我先看看 smbdy 是否真的费心在这里阅读这么多废话

【问题讨论】:

  • 嘿 WiseGuys/退伍军人/专家 - 帮帮我! SO的世界也即将到来;-)
  • 很难看出你的实际问题是什么?通常(尽管不总是)SO 问题包含一些代码,您尝试或发现但没有工作的东西。此外,如果您以“自然”会导致明确答案的形式提出问题,这也会有所帮助。首先,你能不能试着在结尾写一个问题句来表达你需要回答的问题?
  • Jeroen,上面定义的是我的场景,问题以粗体更明确地突出显示

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


【解决方案1】:

关于用户权限,鉴于每个用户组的权限相同,我会将它们存储在缓存中,如下所示:

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 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    相关资源
    最近更新 更多