我们使用自定义RoleProvider
来获取 ASP.NET 应用程序的角色。它正在正确获取角色,但是如果我们cacheRolesInCookie
在 web.config 文件中启用该选项。升级到 .NET 4.5 后,cookie 没有设置。它仍然可以在我们的 .NET 4.0 站点中使用,但是无论何时我们安装 4.5 框架(即使我们仍然在我们的站点中定位 4.0),cookie 都不会设置。
这是我们所期望的(我们在 4.0 中在我们的网站上得到的):
Set-Cookie: .CUSTOMROLES=<LOTS OF DATA>; path=/; HttpOnly
这就是我将本地开发盒升级到 4.5 后得到的(安装 VS2012 后)
Set-Cookie: .CUSTOMROLES=; expires=Tue, 12-Oct-1999 04:00:00 GMT; path=/; HttpOnly
这是 web.config 中的设置
<roleManager defaultProvider="CustomRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName=".DELTAROLES" cookieTimeout="75" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All" >
此外,我们有两个不同的 RoleProviders,并且无论 cookie 的名称是什么,两者都会出现问题,我为其他 cookie 选项尝试了不同的值。
最后,GetRolesForUser() 函数被调用了两次,因为它没有被正确地缓存在 cookie 中。两次都给出了正确的角色。它只是没有让它成为饼干
编辑:
我做了更多的挖掘,发现显然最大 cookie 长度为 4096(不可配置),输出RolePrincipal.ToEncryptedTicket
为 5698。我不确定为什么这与 .NET 4.0 中的不同,但它是不同的。所以,我至少找到了为什么没有设置 cookie,虽然我无法想象它为什么要这么大,因为我们的 RoleProvider 最多只能提供 2 个角色,所以我不知道还有什么它正在尝试存储。