2013-03-01 45 views
1

我们使用自定义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个角色那么大,所以我不知道还有什么它正在尝试存储。

+0

可能重复[缓存RolePrincipal的cookie文本的长度始终大于4096](http://stackoverflow.com/questions/12078210/length-of-the-cookie-text-for-caching-roleprincipal-总是大于4096) – 2013-03-14 14:21:00

回答

-1

所以,我更加关注它,显然它只是一个在.NET 4.5中的bug,使它比预期的更大。微软已经发布了它的修补程序,可以在这里找到:http://support.microsoft.com/kb/2750147

+0

此修复程序不再可用。我只是将.net 4的myy项目升级到4.5,并且遇到同样的问题。有任何想法吗?仍然有文件?谢谢 – 2017-03-12 17:13:34

0

升级到.NET 4.5后,我遇到了同样的问题。我检查了cookie的长度,并且不超过4096,所以这不是原因。可以找出为什么它不保存cookie,但你可以自己保存。请参阅this answer上的示例代码。