2012-04-04 42 views
1

使用ASP.NET MVC3创建Web应用程序,基本框架包括NHibernate(流畅),Ninject,Razor,Automapper,Jquery,Rhino-Security。在Asp.NET中使用会话和缓存进行状态管理(MVC)

需要决定国家管理战略(会话和缓存级别)。 我听到下面的缓存类型,

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

考虑到一般情况下,我想了解国家管理政策是在请求期间使用,

登录

  1. 用户转到站点,仍然未经身份验证,因此重新登录到FormsAuth模块的登录页面(问题 - 由于登录页面不是用户特定的,所以肯定是输出缓存的候选人。但当时的观点纯粹是一种HTML通过MVC逐字刷新,所以通过使用缓存中的任何好处)

的页面访问

  1. 由于我使用的犀牛安全,导航取决于分配给individal权限用户。每个用户可能有分配的特定权限但是大多数用户将具有分配给该用户所属的UseGroup的权限。创建导航是一个两步骤的过程 - 为用户和Gernerating导航UI获取权限集,所以这里是我的两个Q(问题1 - 在每个页面访问权限以及导航创建时需要当前用户的权限,所以在哪里存储它 - 会话?问题2 - 导航太可能可以创建为每个用户的第一次访问和存储在会话,但我们知道这将是相同的UserGroup中的每个用户,除非给出特定的。因此,我们可以创建一个特定的权限集哈希,然后或者保存导航到数据缓存启用输出缓存使用VarByCustom对儿童行动负责创建Nav UI)

我明白我过于冗长了。事实上,我还有更多的问题,但让我先看看,如果smbdy真的很烦这里读这个废话

+0

嗨WiseGuise /退伍军人/专家 - 帮帮我!什么样的世界也来了;-) – EagerToLearn 2012-04-04 11:54:05

+0

很难看出你的实际问题是什么?通常(尽管并非总是)SO问题包含一些代码,您尝试或发现并且无法使用的东西。此外,如果你以一种“自然”导致明确答案的形式提出问题,它会有所帮助。对于初学者来说,你是否可以尝试在最后提出一个问题句子来解决某些问题? – Jeroen 2012-04-04 13:39:41

+0

Jeroen,Up定义了我的场景,问题更加明确地用粗体突出显示 – EagerToLearn 2012-04-04 20:13:31

回答

0

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

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>; 
} 

这样一来,你会从数据库检索它们只是第一次,因为它会被存储在HttpContext.Current.Cache。