Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未正确设置角色提供程序cookie_C#_Asp.net_.net 4.5_Roleprovider - Fatal编程技术网

C# 未正确设置角色提供程序cookie

C# 未正确设置角色提供程序cookie,c#,asp.net,.net-4.5,roleprovider,C#,Asp.net,.net 4.5,Roleprovider,我们使用自定义的RoleProvider获取ASP.NET应用程序的角色。它正确地获取角色,但是如果我们在web.config文件中启用cacheRolesInCookie选项。我们升级到.NET 4.5后,cookie没有设置。它在.NET4.0中仍然可以在我们的站点中使用,但是每当我们安装4.5框架时(即使我们的站点仍然以4.0为目标),cookie都不会被设置 这就是我们所期望的(在4.0中我们在网站上得到的): 这是web.config中的设置 <roleManager defau

我们使用自定义的
RoleProvider
获取ASP.NET应用程序的角色。它正确地获取角色,但是如果我们在web.config文件中启用
cacheRolesInCookie
选项。我们升级到.NET 4.5后,cookie没有设置。它在.NET4.0中仍然可以在我们的站点中使用,但是每当我们安装4.5框架时(即使我们的站点仍然以4.0为目标),cookie都不会被设置

这就是我们所期望的(在4.0中我们在网站上得到的):

这是web.config中的设置

<roleManager defaultProvider="CustomRoleProvider" enabled="true"  cacheRolesInCookie="true" cookieName=".DELTAROLES" cookieTimeout="75" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All" >

此外,我们有两个不同的RoleProvider,这两个角色都会出现问题,而且,无论cookie的名称是什么,我尝试了其他cookie选项的不同值

最后,GetRolesForUser()函数被调用了两次,因为它没有正确地缓存在cookie中。这两次它都提供了正确的角色。只是没能吃到饼干

编辑:


我做了一些进一步的挖掘,发现显然最大cookie长度为4096(不可配置),并且
RolePrincipal.ToEncryptedTicket
的输出为5698。我不知道为什么这与.NET4.0中的不同,但它是不同的。所以,我至少发现了为什么cookie没有被设置,尽管我无法想象为什么它会这么大,因为我们的RoleProvider最多只提供2个角色,所以我不知道它还试图存储什么。

所以,我看了更多,显然这只是.NET 4.5中的一个bug,使它比预期的更大。微软发布了一个修补程序,可以在这里找到:

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

修补程序的可能副本不再可用。我刚刚将myy项目从.NET4升级到4.5,并且遇到了同样的问题。有什么想法吗?文件还在吗?谢谢
Set-Cookie: .CUSTOMROLES=; expires=Tue, 12-Oct-1999 04:00:00 GMT; path=/; HttpOnly
<roleManager defaultProvider="CustomRoleProvider" enabled="true"  cacheRolesInCookie="true" cookieName=".DELTAROLES" cookieTimeout="75" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All" >