我们使用自定义RoleProvider
来获取我们的ASP.NET应用程序的角色。它正确地获取角色,但是如果我们在我们的web.config文件中启用cacheRolesInCookie
选项。升级到.NET 4.5后,Cookie不会被设置。它仍然可以在我们的网站中使用.NET 4.0,但是无论何时我们安装4.5框架(即使我们仍然在我们的网站中定位4.0),cookie也不会被设置。角色提供程序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的最大cookie的长度(非配置)和RolePrincipal.ToEncryptedTicket
输出是5698.我不知道为什么这是不同于它在.NET 4.0中,但它是不同的。所以,至少我发现了为什么cookie没有被设置,尽管我无法想象为什么它会像我们的RoleProvider最多只能提供2个角色那么大,所以我不知道还有什么它正在尝试存储。
可能重复[缓存RolePrincipal的cookie文本的长度始终大于4096](http://stackoverflow.com/questions/12078210/length-of-the-cookie-text-for-caching-roleprincipal-总是大于4096) – 2013-03-14 14:21:00