0

ASP.net ユニバーサル メンバーシップの既定のロール プロバイダーは、ロールをキャッシュする Cookie を作成していません。何か案は

<roleManager enabled="true" createPersistentCookie="true" cacheRolesInCookie="true" cookieTimeout="30" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All" defaultProvider="DefaultRoleProvider" >
  <providers>
    <clear />
    <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</roleManager>

AuthorizeAttributes で MVC を使用していますが、ロール レベルをチェックするたびにデータベースがヒットします。Cookie .asproles が作成されていないようです。

ミニプロファイラーショー

ExecuteStoreCommands Execute GetResults System.Collections.Generic.IEnumerable<T>.GetEnumerator GetRolesNamesForUser GetRolesForUser
DECLARE @appName nvarchar = N'/',
        @userName nvarchar = N'TestUser'

SELECT 
[Project1].[RoleName] AS [RoleName]
FROM ( SELECT 
        [Extent2].[RoleName] AS [RoleName]
        FROM    [dbo].[Users] AS [Extent1]
        CROSS JOIN [dbo].[Roles] AS [Extent2]
        INNER JOIN [dbo].[Applications] AS [Extent3] ON [Extent3].[ApplicationId] = [Extent2].[ApplicationId]
        INNER JOIN [dbo].[UsersInRoles] AS [Extent4] ON ([Extent1].[UserId] = [Extent4].[UserId]) AND ([Extent4].[RoleId] = [Extent2].[RoleId])
        WHERE ((LOWER([Extent3].[ApplicationName])) = @appName) AND ((LOWER([Extent1].[UserName])) = @userName)
)  AS [Project1]
ORDER BY [Project1].[RoleName] ASC   

ありがとう

4

1 に答える 1

0

ライブサーバーで動作するので奇妙です。解決したとしましょう。

于 2012-08-31T10:55:55.520 に答える