2009-06-30 42 views
4

我正尝试使用表单身份验证和以下配置设置。 我已将cacheRolesInCookie设置为true。但是,我发现每个请求都会调用RoleProvider的GetRolesForUser方法。我可以看到cookie .asproles已创建并且包含数据,但似乎被忽略。cacheRolesInCookie未缓存角色

有没有人遇到过这个问题?任何帮助将非常感激。

<authentication mode="Forms"> 
     <forms 
      name=".formsauth" 
      loginUrl="~/Login.aspx" 
      defaultUrl="~/Home.aspx" 
      slidingExpiration="true" 
      timeout="20" 
      path="/" 
      /> 
    </authentication> 

    <!-- Membership Provider --> 
    <membership defaultProvider="CustomMembersipProvider"> 
     <providers> 
      <add name="CustomMembersipProvider" 
       type="Company.Membership.CustomMembersipProvider" /> 
     </providers> 
    </membership> 

    <!-- Role Provider --> 
    <roleManager defaultProvider="CustomMembershipRoleProvider" 
      enabled="true" 
      cacheRolesInCookie="true" 
      cookieName=".asproles" 
      cookieTimeout="20" 
      cookieSlidingExpiration="true" 
      cookieProtection="All" createPersistentCookie="true"> 
     <providers> 
      <add name="CustomMembershipRoleProvider" 
       type="Company.Membership.Provider.CustomMembershipRoleProvider" /> 
     </providers> 
    </roleManager> 

非常感谢 那仁

+0

我也遇到同样的情况,你有什么解决方案吗? – 2014-08-27 09:27:58

回答

1

什么方法RolePrincipal被称为? IsInRole方法在.asproles cookie中使用缓存,但GetRoles方法会根据请求触发一次到您的RoleProvider的调用。

0

将我的应用程序升级到MVC5后,.NET 4.5开始出现同样的问题。要解决您的问题,您必须自行保存cookie。请参阅here