Asp.NET(MVC)中的会话和缓存状态管理
本文关键字:会话 缓存 状态 管理 NET MVC Asp | 更新日期: 2023-09-27 18:30:09
使用ASP.NET MVC3创建Web应用程序,基本框架包括NHibernate(Fluent)、Ninject、Razor、Automapper、Jquery、Rhino Security。
需要决定状态管理策略(会话和缓存级别)。我听说过以下缓存类型,
- 输出缓存
- 甜甜圈(洞)缓存
- 数据缓存
考虑到一般情况,我想了解在请求过程中使用的状态管理策略,
登录
- 用户去了网站,仍然没有经过身份验证,所以通过FormsAuth模块重新报告到登录页面(问题-由于登录页面不是特定于用户的,肯定是输出缓存的候选者。但视图是MVC逐字刷新的纯HTML,所以使用缓存的任何好处)
页面访问
- 由于我使用Rhino Security,导航取决于分配给单个用户的权限。每个用户可能都分配了特定权限,但大多数用户都会将权限分配给该用户所属的UseGroup。创建导航是一个分两步的过程——为用户获取权限集和生成导航UI,下面是我的两个Q(问题1-在每次访问页面时都需要当前用户的权限才能进行操作授权和导航更改,所以将其存储在哪里-会话?问2–导航也可能会为每个用户创建首次访问并存储在会话中,但我们知道,除非指定c个。因此,我们可以为某组权限创建哈希,然后将导航保存到数据缓存或使用负责创建Nav UI的VarByCustom on Child操作启用输出缓存)
我觉得我太冗长了。事实上,我确实有更多的问题,但让我先看看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>;
}
这样,您将只在第一次从DB中检索它们,因为它将存储在HttpContext.Current.Cache.