【问题标题】:Role Provider cookie not being set properly角色提供者 cookie 未正确设置
【发布时间】:2017-03-26 04:20:15
【问题描述】:

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

【问题讨论】:

标签: c# asp.net .net-4.5 roleprovider


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 该修补程序不再可用。我刚刚将 myy 项目从 .net 4 升级到 4.5 并遇到了同样的问题。有任何想法吗?文件还在吗?谢谢
    猜你喜欢
    • 2015-10-22
    • 2011-07-08
    • 2023-03-14
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 2012-04-08
    相关资源
    最近更新 更多