1

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

4

2 回答 2

0

升级到 .NET 4.5 后我遇到了同样的问题。我检查了 cookie 的长度,它没有超过 4096,所以这不是原因。可以弄清楚为什么它没有保存 cookie,但您可以自己保存。请参阅此答案的示例代码。

于 2017-03-25T20:20:15.333 回答
-1

因此,我对此进行了更多研究,显然它只是 .NET 4.5 中的一个错误,使其比预期的要大。Microsoft 已经发布了一个修补程序,可以在这里找到:http: //support.microsoft.com/kb/2750147

于 2013-03-14T14:20:38.403 回答