Cookie中的ASP.NET问题缓存角色

时间:2009-07-14 21:19:05

标签: asp.net roles

我正在使用具有特殊角色“必须更改密码”的ASP.NET角色。如果用户未将密码更改超过90天,则会自动将其添加到此角色。这在用户登录过程中发生。授权规则然后拒绝该角色访问除“更改密码”页面之外的所有应用程序。

通常这很好用,但是当使用角色缓存cookie来缓存角色时会出现问题。在登录过程中会发生什么,检查密码最后更改日期,如果> 90天后,用户被添加到“必须更改密码”角色。在同一页面请求中,我随后调用Roles.IsUserInRole(“必须更改密码”)来决定是否将用户重定向到“更改密码”页面。这就是它失败的地方 - 似乎在启用角色缓存cookie的情况下,Roles.IsUserInRole(“必须更改密码”)没有意识到我已经更改了此用户的角色映射,并返回false。但是,在下一页请求中,Roles.IsUserInRole(“必须更改密码”)返回true。

通过设置cacheRolesInCookie =“false”来解决此问题,但这似乎是一个很高的代价。有没有其他方法可以解决这个问题?

3 个答案:

答案 0 :(得分:1)

另一个,恕我直言更优雅,解决方案是在向用户添加新角色(read more on RolePrincipal.SetDirty)之后将HttpContext.User投射到RolePrincipal并调用SetDirty方法。

下一次调用IsInRole或GetRolesForUser方法应该会触发对默认RoleProvider的请求。

答案 1 :(得分:0)

由于您说同一个请求中存在问题,如何在HttpContext.Current.Items集合中设置一个项目以指示用户必须更改其密码,并同时检查cookie和HttpContext.Current。稍后在代码中收集项目?

答案 2 :(得分:0)

实际上,我发现了这个问题 - 在cookie中缓存角色不是问题,而是Roles.IsUserInRole()的问题。如果我使用重载Roles.IsUserInRole(用户名,角色),那么它可以正常工作,有或没有角色缓存在cookie中。