6

我想知道为什么Chrome(26.0.1410.64)和IE10似乎无法识别我在ASP.NET Web API控制器响应中设置的cookie。情况如下:响应Cookie未被Chrome和IE设置为

我的页面上有一个下拉菜单登录表单,它对我的​​Web API方法(通过HTTP POST)进行ajax调用,并且Web API方法返回一些JSON数据,并设置一个cookie在响应中(使用HTTP标头)。它适用于Firefox和Safari(如此,WebKit),但不适用于Chrome或IE。 Chrome和IE似乎完全忽略了在响应中发回的cookie。我已经验证过(使用Fiddler)cookie被发送回来,所以我知道它在那里 - 我不明白为什么IE10和Chrome不会选择它。

任何想法?这与Chrome和IE10如何在ajax请求中处理响应cookie有关吗?

回答

17

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

所以这里的问题:

当我从Visual Studio和IIS运行它在我的本地机器上运行我的网站在本地,它创建于像http://localhost:1839/地址的网站。出于某种原因,当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

我遇到了与Chrome v40相同的问题。这真的很烦人。请参阅:http://i.imgur.com/q7lkXBz。gif – Gaui 2015-02-18 12:02:35

+1

是的,它似乎仍然是Firefox实际上接受和存储本地主机cookie的唯一浏览器,这就是为什么我使用它来开发任何涉及ajax请求和Cookie的原因。 – jamauss 2015-03-01 12:09:59

+0

我设法[用XMLHttpRequests解决这个问题](http://stackoverflow.com/questions/28583729/localhost-cookies-not-set/28594724) – Gaui 2015-03-01 14:10:46

2

设置cookie上的域与使用本地主机最有可能发生冲突。如果您修改hosts文件,并添加一个别名,它将使test.mydomain.com点到本地机器:

  • 在C:\ WINDOWS \ SYSTEM32 \ DRIVERS \等\主机添加以下内容:
    • 127.0.0.1 test.mydomain.com
  • Visual Studio中启动Web服务器时
  • 关闭所有浏览器,然后加载test.mydomain.com
+0

这个技巧非常值得理解和实现在本地主机上运行的所有站点Windows环境。它会为你节省很多头痛。 – fergal303 2016-09-07 11:20:30

1

这让我坚持了一个小时,直到我找到答案。我正在测试一个基于Tornado的服务器,实现Auth0的后验证回调。服务器使用了Chrome浏览器忽略的HTTPRequest.set_secure_cookie()。使用Firefox回避了这个问题,就像在不同的桌面上从Chrome上测试一样。