响应Cookie未被Chrome& IE

时间:2013-04-28 13:22:06

标签: ajax google-chrome cookies asp.net-web-api internet-explorer-10

我正在试图找出为什么Chrome(26.0.1410.64)和IE10似乎无法识别我在ASP.NET Web API控制器的响应中设置的cookie。情况如下:

我的页面上有一个下拉菜单登录表单,它对我的​​Web API方法进行ajax调用(通过HTTP POST),Web API方法返回一些JSON数据,并在响应中设置一个cookie(使用HTTP标头)。它在Firefox和Safari(因此,WebKit)中完美运行,但在Chrome或IE中则无法运行。 Chrome和IE似乎完全忽略了在回复中发回的Cookie。我已经验证了(使用Fiddler)在响应中发回了cookie,所以我知道它就在那里 - 我无法弄清楚为什么IE10和Chrome不会接收它。

有什么想法吗?它与Chrome和IE10如何处理ajax请求中的响应cookie有关吗?

3 个答案:

答案 0 :(得分:18)

所以我想出了这个问题,虽然这不是我真正想接受的解决方案。我想我只需要处理它并且总是使用Firefox在我的本地机器上测试该站点。

所以这就是问题所在:

当我通过本地计算机上的Visual Studio和IIS运行本地站点时,它会在http://localhost:1839/这样的地址创建一个网站。出于某种原因,当它是“localhost”时,IE10和Chrome会忽略ajax cookie - 但是当它是一个真实的主机名或IP地址时却不会被忽略。因此,如果我编辑我的主机文件并创建像localhost.com这样的通用条目并将其指向127.0.0.1:1839,那么IE和Chrome(以及Firefox仍然如此)的一切正常。

当我使用localhost:1839地址时,ajax cookie仅适用于Firefox。

所以我最终做的是将我的网站部署到另一台测试IIS服务器(在另一台机器上),我在本地主机文件中有一个test.mydomain.com条目 - 指向测试IIS服务器的IP地址。现在,IE,Chrome和Firefox都接受来自这个伪造的“test.mydomain.com”域名的ajax cookie。

因此,对于那些在ajax请求上发送cookie的人 - 请注意Chrome和IE的这个“localhost”问题。

答案 1 :(得分:2)

设置cookie上的域很可能与使用localhost冲突。如果您编辑主机文件并添加别名,则会使test.mydomain.com指向您的本地计算机:

  • 在c:\ windows \ System32 \ drivers \ etc \ hosts中添加以下内容:
    • 127.0.0.1 test.mydomain.com
  • 在Visual Studio中启动您的网络服务器
  • 关闭所有浏览器,然后加载test.mydomain.com

答案 2 :(得分:1)

这让我疯了一个小时,直到我找到了这个答案。我正在测试一个基于Tornado的服务器,它实现了Auth0的post认证回调。服务器使用了Chrome忽略的HTTPRequest.set_secure_cookie()。使用Firefox可以避免这个问题,就像在不同桌面上使用Chrome进行测试一样。

相关问题