我在ASP.NET MVC 3应用程序中使用SqlRoleManager,效果很好。我最近启用了cacheRolesInCookie选项,该选项显然适用于Firefox和Internet Explorer,但不适用于Chrome。在Fiddler,我甚至没有看到cookie回复Chrome中的响应。
以下是我在Web.config中设置的内容:
<roleManager enabled="true" defaultProvider="SqlRoleManager" cacheRolesInCookie="true" cookieName=".ASPROLES" cookieSlidingExpiration="false" cookieTimeout="5" createPersistentCookie="true" maxCachedResults="255">
<providers>
<add name="SqlRoleManager"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="aspnetConnectionString"
applicationName="RedactedNamespace.Web" />
</providers>
</roleManager>
正如我所提到的,它在Firefox和IE中很有用,但不适用于Chrome。看着SQL Server Profiler,我可以清楚地看到Firefox和IE中的第一个请求将命中数据库中的角色,然后缓存它们直到cookie过期。 Chrome会针对每个请求点击数据库一次。
我也在使用SqlMembershipProvider并从FormsAuthenticationTicket中手动设置cookie而没有任何问题; cookie适用于所有浏览器。
在Firefox中,cookie接近(但小于)4096字节,并且是HttpOnly。
如何在Chrome中的Cookie中缓存角色?