我在 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 中?