IE10用户代理导致ASP.Net不发回Set-Cookie(IE10未设置cookie)


91

摘要

Set-Cookie使用IE 10时,ASP.Net不会发送回标头。这意味着,例如,当使用表单身份验证时,例如,您无法使用IE10登录到ASP.Net站点。

详情

我们目前正在针对IE 10 [预览版2]测试我们的旧版网络应用程序之一。

尝试使用表单身份验证登录时,Set-Cookie如果用户代理为IE 10 ,则不会在响应中得到标头。我们已经尝试使用空白的.Net 2和.Net 4网站。

因为我们无法/不相信它,所以甚至telnet在使用所有常用工具之后,我们甚至手动运行了以下HTTP请求-并获得了相同的响应。

GET http://test.ourdomain.co.uk/ HTTP/1.1
Accept: */*
Host: test.ourdomain.co.uk
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)
Content-Length: 0

上面的HTTP请求Set-Cookie在响应中返回no 。但是,如果我们只是简单地将User-Agent更改为Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/6.0)有效!

其他人可以复制吗?除了影响非标准URL模式的问题外,我找不到IE10 cookie的任何已知问题。

修补程序

devio发布原始答案并采用解决方法后,nullptr确认现在有针对此修复程序

http://support.microsoft.com/kb/2600088

我已经将主要问题的修补程序升级了,因为它更方便将来参考,但是请对所提到的用户进行投票。


1
注意-上面的示例来自我们在get请求上设置cookie(使用Response.SetCookie())
isNaN1247

使用browserCaps的另一种可能的解决方案:stackoverflow.com/a/13474958/1191905
Anton Skovorodko,2012年

我们是否将修补程序应用于IIS或客户端计算机?
Arcadian 2013年

@ magic-c0d3r这是.NET本身的修复程序,因此应应用于承载IIS的计算机(即Web服务器)
isNaN1247 2013年

3
.NET 2.0 / 3.5的修复程序可能也很有趣:support.microsoft.com/kb/2600100
fortboise 2013年

Answers:


66

MS Connect上找到此条目,此行为是公认的错误。

建议的解决方法(来自条目):

==解决方法==

同时,为了使其运行并避免将来出现类似问题,我将文件〜\ App_Browsers \ BrowserFile.browser与以下内容一起使用:

<browsers>
<browser refID="Default">
<capabilities><!-- To avoid wrong detections of e.g. IE10 -->
<capability name="cookies" value="true" />
<capability name="ecmascriptversion" value="3.0" />
</capabilities>
</browser>
</browsers>

7
噢,我的...那是个小错误-我高度怀疑所有ASP.Net网站都将在IE10发行之时进行修补。
isNaN1247 2011年

2
谢谢你 它帮助我着手进行了与我们应用程序的兼容性测试。起初很难知道它是我们的应用程序还是Beta版,但是有了变通办法使我们变得高效
MikeJ 2011年

这适用于IE10 / Win8,但不适用于IE10 / Win7。很奇怪。
ScottE

1
我为某些人感到惊讶,因为它不适用于我。请参阅下面的cookieless =“ UseCookies”答案,以获取替代解决方案,我认为该解决方案更具前瞻性和可靠性。
mike nelson

71

问题在于某些IIS实例认为IE10是无cookie浏览器(即不能支持cookie)。在我们遇到问题的情况下,服务器正在设置身份验证cookie并将其发送回浏览器,但是随后在后续请求中忽略了cookie。

解决方案是修补浏览器功能,以便它知道IE10可以执行cookie(在此页面的另一个答案中列出),或者更改默认行为以强制其使用cookie,即使它认为浏览器不能执行cookie。

我们只是将以下内容添加到web.config中的表单部分:

cookieless =“ UseCookies”

<authentication mode="Forms">
  <forms name=".AUTH" cookieless="UseCookies" loginUrl="/" timeout="10000" path="/" />
</authentication>

3
修复了IE10的问题
Oleg Yevteyev

1
在尝试了其他解决方案之后,并且修复程序拒绝安装它与我们的服务器不兼容,我尝试了此方法。这是唯一为我们解决问题的东西。
Brian Surowiec

我要做的就是调整Web.config以立即看到结果。Bravo
tuespetre

我认为这是正确的答案。设置了cookie,因此在提琴手中一切看起来都很好,并且ASP.NET能够将其读回得很好(当我设置测试页时),但是Forms Auth忽略了它。这是Forms Auth的一个严重限制,但是您的修复使它像以前一样应该正常工作!
mike nelson

1
与修补IIS相比,这是一种更好且可行的解决方案。
generalnetworkerror

33

3
太好了,谢谢您-我已经提升了问题主体的链接,以备将来参考。
isNaN1247 2011年

2
确认。截至目前(2012年8月),它仍然是一个错误。我将尝试此修复程序。
埃里克·阮

12
还是一个错误04/2013-wtf?
Scott Selby 2013年

即使我们更新了KB修补程序,我们仍然遇到此问题。我还将浏览器文件添加到Web csproj。似乎都没有帮助。有用的是,我们在“受信任的站点”对话框中添加了“站点”。现在,我们将在单点登录时从市场应用程序重定向到IFrame。我假设有一种处理此重定向的侵入性较小的方法,但是有关此问题的文档似乎很有限。
Paul Shriner

3

谢谢您的帮助。它没有工作。

  1. 我将文件从站点复制 到了C:\WINDOWS\microsoft.net\Framework\v2.0.50727\CONFIG\Browsers

  2. 在命令提示符下运行 C:\WINDOWS\microsoft.net\Framework\v2.0.50727>aspnet_regbrowsers.exe -i

  3. 重新启动IIS。

  4. 测试了站点,它可以正常工作。

再次感谢你的反馈


2

nullptr答案的更新。

我今天尝试下载Microsoft KB2600088。通过电子邮件收到链接后,我单击了该链接,然后将其引导至页面,提示该页面不再可用。

试试这个:http : //support.microsoft.com/kb/2600217

该链接是KB2600088和KB2628838的替代品。

MIcrosoft .Net Framework 4.5现在也可用。


感谢您发布此更新。我在使用此链接support.microsoft.com/kb/2600088时遇到问题,主要是因为服务器上的IE无法正确显示该页面。您的更新对我有很大帮助。
Daniel Hollinrake 2013年

0

安装了每个人都提及的各种补丁程序,以及由于某种原因无法解决的问题。

安装了.NET Framework 4.5 Full,问题消失了。

您无需将任何项目更新为目标4.5。只需将其安装在服务器上即可。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.