我们使用自定义RoleProvider
来获取ASP.NET应用程序的角色。它正确地获得了角色,但是如果我们在web.config文件中启用cacheRolesInCookie
选项。我们升级到.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
修改
我做了一些挖掘,我发现显然最大cookie长度为4096(不可配置),RolePrincipal.ToEncryptedTicket
的输出为5698.我不确定为什么这个不同于它是在.NET 4.0中,但它是不同的。所以,至少我发现了为什么没有设置cookie,虽然我无法想象为什么它会如此大,因为我们的RoleProvider只提供最多2个角色,所以我不知道还有什么它试图存储。
答案 0 :(得分:0)
升级到.NET 4.5后我遇到了同样的问题。我检查了饼干的长度,它在4096以上,所以这不是原因。可以弄清楚为什么它不能保存cookie但你可以自己保存它。请参阅this answer上的示例代码。
答案 1 :(得分:-1)
所以,我更多地看了这个,显然它只是.NET 4.5中的一个错误,使它比预期更大。 Microsoft已发布了一个修补程序,可在此处找到:http://support.microsoft.com/kb/2750147