【发布时间】:2012-02-09 16:37:15
【问题描述】:
如果您的用户数据处于会话状态 (HttpContext) 并且有人在数据库中为他们更改角色,而现在您持有角色列表的会话与D B?您不想每次都点击数据库来检查角色。
这是如何处理的?
【问题讨论】:
-
我在我身上看到了同样的情况,实际上需要重新登录才能查看新角色...
标签: asp.net .net asp.net-mvc asp.net-mvc-3
如果您的用户数据处于会话状态 (HttpContext) 并且有人在数据库中为他们更改角色,而现在您持有角色列表的会话与D B?您不想每次都点击数据库来检查角色。
这是如何处理的?
【问题讨论】:
标签: asp.net .net asp.net-mvc asp.net-mvc-3
使用 SqlCacheDependency 来监视具有角色的表。当表改变时,缓存失效。然后查询缓存中的角色,而不是数据库。
http://msdn.microsoft.com/en-us/library/system.web.caching.sqlcachedependency.aspx
【讨论】:
假设在同一个应用程序中进行了更改,您可以在静态属性(可能是字典)上设置各种信号量。然后,在开始请求事件中的一个 httpmodule 中,检查属性并根据属性值刷新会话数据。
确保在属性上使用锁/监视器以防止多个线程同时访问它。
【讨论】:
对用户会话变量的更改必须由用户发起。我不知道如何做到这一点,以便如果用户当前已登录,并且管理员更改了他们的角色,则更新他们现有的会话(无需用户加载新页面或开始新请求)。对于角色/和身份验证项目,出于安全原因,您可能确实希望在每次加载新页面时执行检查。这样,如果您阻止访问,效果会立即生效,并且在您关闭访问后他们不会保持会话处于活动状态。
对一行数据进行基本选择的小检查不应该杀死您的服务器,除非您收到数十万个对功率不足的服务器/秒的请求
【讨论】: